在某些情况下,可能会发生数组结构中有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);