所以我正在进行 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 || " ;
新
假||空 ||未定义 ||南|| ”; 返回
[ 7, 'ate', '', 9 ]
知道发生了什么吗???谢谢!
最佳答案
return value !== '' ||false || null || undefined || NaN ;
这并不像你想象的那样。它实际上相当于
(((((value !== '') || false) || null) || undefined) || NaN)
当 value !== ''
时(在大多数情况下),此表达式为 true。您实际上需要检查
value !== '' && value !== false && value !== null && value !== undefined && value !== NaN
但是由于这些都是假的,并且 Array.filter
只关心真实性和虚假性,因此您可以将 truthy
函数替换为
function truthy(value) {
return value;
}
这甚至不值得分成三行:
var filtered = arr.filter(e => e);
关于javascript - 从数组中删除虚假值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841877/