Lodash:过滤对象数组并检查是否为空

时间:2016-04-25 18:04:56

标签: javascript arrays underscore.js lodash

我刚开始使用lodash并拥有这个对象数组,其中一个属性有一个整数或为null。我知道如何过滤数组中的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的新手,所以也许有更好的方法来实现这一目标。

提前致谢。

5 个答案:

答案 0 :(得分:26)

这可以通过_.reject_.filter来解决:

var notNullDefault = _.reject(sourceData, ['default', null]);

var nullDefault = _.filter(sourceData, ['default', null]);

DEMO

答案 1 :(得分:2)

您可以创建一些谓词函数来检查默认值而不是默认用户:

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);

答案 2 :(得分:1)



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>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

尝试这样的事情:

var notNullDefault = _.filter(users, function(elem) { return elem.default !== null; }); 
var nullDefault = _.filter(users, function(elem) { return o.default === null; }); // object with  name fred

返回的数组仅包含回调函数返回true的元素。

或者,正如他们将它放在the fine manual中:迭代集合的元素,返回所有元素的数组谓词返回truthy for。使用三个参数调用谓词:(value,index | key,collection)。

答案 4 :(得分:0)

我相信这些图书馆有时候只是浪费时间。不是学习依赖于库的特定抽象,而是最好能够很好地保持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>");