使用Underscore过滤掉包含null值的数组

34

我有这个数组:

[null, {name:'John'}, null, {name:'Jane'}]

我想删除空值。使用 underscore 有简单的方法可以做到吗?

5个回答

69

如果数组包含null或对象,则可以使用compact

var everythingButTheNulls = _.compact(list);

NB compact会移除所有的假值,所以如果数组中包含零、false等元素,它们也将被移除。

也可以使用rejectisNull谓词:

var everythingButTheNulls = _.reject(array, _.isNull);

如果您的Lodash版本支持 _.isNil,那么它将过滤null、NaN和undefined。var everythingButTheNulls = _.reject(array, _.isNil); - Nawlbergs

21

要移除空值,我会使用 without(array, undefined)。 - Dheeraj Bhaskar

5

This will work for you

Filter

_.filter(arr,function (value) {
    return value!==null;
})

拒绝

_.reject(arr,function (value) {
    return value===null;
})

1
_.reject(arr, _.isNull) 可能更简洁。或者只需使用 _.without(arr, null)。 - Kloar

1
最佳解决方案是使用 紧凑型,但当你不包含特定的真值测试函数时,过滤函数的默认行为是删除 falsy 值。
例如:
_.filter([null, {name:'John'}, null, {name:'Jane'}])

返回一个没有空值的对象数组:
[{name:'John'}, {name:'Jane'}]

0

来自下划线文档

without_.without(array, *values) 
Returns a copy of the array with all instances of the values removed.

所以只需使用这种方法

var a = [null, {name:'John'}, null, {name:'Jane'}]
a = _.without(a, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接