因此,我正在执行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 ]
如果我切换函数true的顺序,则返回的值会更改。例如,移动“
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;
----->
return false || null || undefined || NaN || " ;
新的
假||空||未定义|| 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/