在某些情况下,可能会发生数组结构中有undefined
或通常为假值的情况。例如,从一些未知来源(如数据库或 HTML 结构)读取和填充数据时。喜欢
var data = [42, 21, undefined, 50, 40, undefined, 9]
由于在循环遍历此类数组并处理元素时可能会导致麻烦,因此删除undefined
(falsy values)的最佳做法是什么?
在某些情况下,可能会发生数组结构中有undefined
或通常为假值的情况。例如,从一些未知来源(如数据库或 HTML 结构)读取和填充数据时。喜欢
var data = [42, 21, undefined, 50, 40, undefined, 9]
由于在循环遍历此类数组并处理元素时可能会导致麻烦,因此删除undefined
(falsy values)的最佳做法是什么?
在Array.prototype.filter
这里使用可能很明显。所以为了只删除未定义的值,我们可以调用
var data = [42, 21, undefined, 50, 40, undefined, 9];
data = data.filter(function( element ) {
return element !== undefined;
});
如果我们想过滤掉所有的假值(例如 0 或 null),我们可以return !!element;
改用。
但是,我们可以做到这一点略低更优雅,被正好路过的Boolean
构造函数,分别是Number
构造函数.filter
:
data = data.filter( Number );
在这种情况下,这将完成工作,通常删除任何虚假值,我们会调用
data = data.filter( Boolean );
由于Boolean()
构造函数返回true
的truthy值和false
任何falsyvalue,这是一个非常整洁的选择。
使用 lambda 内联
result.filter(item => item);
您可以使用 lodashcompact
方法,该方法删除null
,undefined
和''
_.compact(data)
ES6 单行
data.filter(e => e)
如果您有一组对象并想删除所有null
和undefined
项目:
[].filter(item => !!item);