问题描述
在某些情况下,可能会在数组结构中出现undefined
或通常为 falsy 的值.例如,当从一些未知来源(例如数据库或HTML结构)读取和填充数据时.喜欢
In certain situations, it may happen that we have undefined
or generally falsy values in Array structures. For instance when reading and filling data from some unknown sources like Databases or HTML structures. Like
var data = [42, 21, undefined, 50, 40, undefined, 9]
由于在循环访问此类数组和处理元素时可能会引起麻烦,因此删除undefined
(虚假值)的最佳实践是什么?
Since that might cause trouble when looping over such arrays and working on the elements, what is the best practice to remove undefined
(falsy values) ?
推荐答案
在这里使用Array.prototype.filter
可能很明显.因此,要删除仅未定义的值,我们可以调用
To use Array.prototype.filter
here might be obvious. So to remove only undefined values we could call
var data = [42, 21, undefined, 50, 40, undefined, 9];
data = data.filter(function( element ) {
return element !== undefined;
});
如果要过滤掉所有虚假值(例如0或null),可以改用return !!element;
.
If we want to filter out all the falsy values (such as 0 or null) we can use return !!element;
instead.
但是,只要将Boolean
构造函数或Number
构造函数分别传递给.filter
:
But we can do it slighty more elegant, by just passing the Boolean
constructor function, respectively the Number
constructor function to .filter
:
data = data.filter( Number );
在这种情况下,这样做就可以了,一般来说,要删除任何 falsy 值,我们会调用
That would do the job in this instance, to generally remove any falsy value, we would call
data = data.filter( Boolean );
由于Boolean()
构造函数在 truthy 值上返回true
并且在任何 falsy 值上返回false
,所以这是一个非常简洁的选项.
Since the Boolean()
constructor returns true
on truthy values and false
on any falsy value, this is a very neat option.
这篇关于从数组中删除未定义的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!