Lodash:过滤对象数组并检查是否为空
Lodash: Filter array of objects and check if not null
我刚开始使用 lodash 并拥有这个对象数组,其中一个属性要么是整数要么是 null。我知道如何过滤数组中的空项,但如何检查它是否不为空?
假设我有这样的事情:
var users = [
{ 'user': 'barney', 'default': 1 },
{ 'user': 'dino', 'default': 0 },
{ 'user': 'wilma', 'default': 1 },
{ 'user': 'fred', 'default': null }
];
然后我想要这样的东西:
var notNullDefault = _.filter(sourceData, ['is_default', ! null ]); // objects with names barney, dino, wilma
var nullDefault = _.filter(sourceData, ['is_default', null ]); // object with name fred
同样,我是 lodash 的新手,所以也许还有更好的方法来完成此任务。
提前致谢。
试试这样的东西:
var notNullDefault = _.filter(users, function(elem) { return elem.default !== null; });
var nullDefault = _.filter(users, function(elem) { return o.default === null; }); // object with name fred
返回的数组只包含回调函数 returns true
.
的元素
或者,正如他们在 the fine manual 中所说的那样:遍历集合的元素,返回所有元素谓词 returns 为真的数组。使用三个参数调用谓词:(value, index|key, collection).
您可以创建几个谓词函数来检查默认用户和非默认用户:
var isDefaultUser = function(user){
return _.isNull(user.default);
}
var isNotdefaultUser = _.negate(isDefaultUser);
然后它们可以用于过滤等。
var defaultUser = _.filter(users, isDefaultUser);
var notDefaultUsers = _.filter(users, isNotdefaultUser);
// partition will be an array; first element contains the default users
// second element contains the non default users
var parition = _.partition(users, isDefaultUser);
我相信这些库有时只是在浪费时间。与其学习依赖于库的特定抽象,不如掌握 ES6 数组函数和箭头。所以你去吧;
var users = [
{ 'user': 'barney', 'default': 1 },
{ 'user': 'dino', 'default': 0 },
{ 'user': 'wilma', 'default': 1 },
{ 'user': 'fred', 'default': null }
],
userNull = [],
userFull = [];
users.forEach(e => e.default == void 0 ? userNull.push(e) : userFull.push(e));
document.write("<pre> userNull:\n" + JSON.stringify(userNull, null, 2) + "</pre>");
document.write("<pre> userFull:\n" + JSON.stringify(userFull, null, 2) + "</pre>");
var notNullDefault = _.reject(sourceData, ['default', null]);
var nullDefault = _.filter(sourceData, ['default', null]);
let items = [1, 2, 4, null];
let isHaveNull = _.some(items, (item) => _.isNull(item));
console.log(isHaveNull);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
我刚开始使用 lodash 并拥有这个对象数组,其中一个属性要么是整数要么是 null。我知道如何过滤数组中的空项,但如何检查它是否不为空?
假设我有这样的事情:
var users = [
{ 'user': 'barney', 'default': 1 },
{ 'user': 'dino', 'default': 0 },
{ 'user': 'wilma', 'default': 1 },
{ 'user': 'fred', 'default': null }
];
然后我想要这样的东西:
var notNullDefault = _.filter(sourceData, ['is_default', ! null ]); // objects with names barney, dino, wilma
var nullDefault = _.filter(sourceData, ['is_default', null ]); // object with name fred
同样,我是 lodash 的新手,所以也许还有更好的方法来完成此任务。
提前致谢。
试试这样的东西:
var notNullDefault = _.filter(users, function(elem) { return elem.default !== null; });
var nullDefault = _.filter(users, function(elem) { return o.default === null; }); // object with name fred
返回的数组只包含回调函数 returns true
.
或者,正如他们在 the fine manual 中所说的那样:遍历集合的元素,返回所有元素谓词 returns 为真的数组。使用三个参数调用谓词:(value, index|key, collection).
您可以创建几个谓词函数来检查默认用户和非默认用户:
var isDefaultUser = function(user){
return _.isNull(user.default);
}
var isNotdefaultUser = _.negate(isDefaultUser);
然后它们可以用于过滤等。
var defaultUser = _.filter(users, isDefaultUser);
var notDefaultUsers = _.filter(users, isNotdefaultUser);
// partition will be an array; first element contains the default users
// second element contains the non default users
var parition = _.partition(users, isDefaultUser);
我相信这些库有时只是在浪费时间。与其学习依赖于库的特定抽象,不如掌握 ES6 数组函数和箭头。所以你去吧;
var users = [
{ 'user': 'barney', 'default': 1 },
{ 'user': 'dino', 'default': 0 },
{ 'user': 'wilma', 'default': 1 },
{ 'user': 'fred', 'default': null }
],
userNull = [],
userFull = [];
users.forEach(e => e.default == void 0 ? userNull.push(e) : userFull.push(e));
document.write("<pre> userNull:\n" + JSON.stringify(userNull, null, 2) + "</pre>");
document.write("<pre> userFull:\n" + JSON.stringify(userFull, null, 2) + "</pre>");
var notNullDefault = _.reject(sourceData, ['default', null]);
var nullDefault = _.filter(sourceData, ['default', null]);
let items = [1, 2, 4, null];
let isHaveNull = _.some(items, (item) => _.isNull(item));
console.log(isHaveNull);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>