【发布时间】:2015-11-02 16:59:15
【问题描述】:
我被要求在 array 中过滤掉 NaN, null, 0, false。
幸运的是我已经回答了这个问题。
function bouncer(arr) {
function filterer(arr) {
return arr > 0|| isNaN(arr) === true;
}
arr = arr.filter(filterer);
return arr;
}
//example input
bouncer([0, 1, 2, 3, 'ate', '', false]); //output [1, 2, 3, 'ate']
但问题是我真的不知道我是如何得出答案的,或者更确切地说我不知道它是如何工作的。特别是在 arr > 0 上,过滤器是如何知道 arr 已经在 arr[1]、arr[2] 等上读取的。而不使用循环遍历所有数组。
或者可以简单地解释一下代码是如何工作的。 [我已经尽力解释清楚了---]
【问题讨论】:
-
您的代码错误。对于像
-1这样的值,它会失败...尝试arr.filter(function(item) {return !!item;}) -
@NiettheDarkAbsol 为什么不
[0, 1, 2, 3, 'ate', '', false].filter(Boolean)? -
是的,布尔过滤器是最好的,除非你想保持未定义
-
如果您删除
isNaN,那么@MattBurlandate也将删除输出将是[1, 2, 3] -
@Manwal:公平点,我错过了
ate。
标签: javascript arrays filter boolean nan