因此,我正在执行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/

10-11 12:57