所以我正在进行FreeCodeCamp挑战“从数组中删除所有虚假值” .
我做了一个函数,但由于某种原因它不会过滤掉所有的虚假值:
function bouncer(arr) {
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;
}
var filtered = arr.filter(truthy);
return filtered;
}
bouncer([7, "ate", "", false, 9]);
这应该回来了
[7, "ate", 9],
而是返回
[ 7, 'ate', false, 9 ]
如果我切换函数truthy的顺序,返回的值会改变 . 例如移动'',
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;
----->
return false || null || undefined || NaN || " ;
新的
假|| null || undefined || NaN || “;回归
[ 7, 'ate', '', 9 ]
知道发生了什么事吗???谢谢!
3 回答
这不符合你的想法 . 它实际上相当于
value !== ''
时,与大多数情况一样,此表达式为真 . 你真的需要检查但是因为无论如何这些都是假的并且
Array.filter
只关心真实和虚假,你可以用你的truthy
替换你的truthy
函数这甚至不值得突破三行:
除了AuxTaco's answer ......
“所有假值”也包括0 .
通过使用Boolean作为函数,可以进一步缩短过滤器表达式:
问题是,当值不为空时,返回语句将始终返回true
应该是这样的