从数组中删除Falsy值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从数组中删除Falsy值相关的知识,希望对你有一定的参考价值。

所以我正在进行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 ]

知道发生了什么事吗???谢谢!

答案

return value !== '' ||false || null || undefined || NaN ;

这不符合你的想法。它实际上相当于

(((((value !== '') || false) || null) || undefined) || NaN)

当你在大多数情况下使用value !== ''时,这种表达方式是正确的。你真的需要检查

value !==  '' && value !== false && value !== null && value !== undefined && value !== NaN

但是因为无论如何这些都是假的而且Array.filter只关心真实性和虚假性,你可以用你的truthy函数替换你的function truthy(value) { return value; } 函数

var filtered = arr.filter(e => e);

这甚至不值得突破三行:

AuxTaco's answer
另一答案

除了Boolean ......

  1. “所有假值”也包括0。
  2. 通过使用function bouncer(arr) { return arr.filter(Boolean); } console.log(bouncer([7, "ate", "", false, 9, 0, NaN, null, undefined]));作为函数,您可以进一步缩短过滤器表达式:

function truthy(value) {
    return value !==  '' ||false || null || undefined || NaN ;
}
另一答案

问题是,当值不同于空白时,返回语句将始终返回true

function truthy(value) {
    falseValues = ['',false,null,undefined,NaN];
    return !falseValues.contains(value);
}

应该是这样的

qazxswpoi

以上是关于从数组中删除Falsy值的主要内容,如果未能解决你的问题,请参考以下文章

Falsy Bouncer(过滤数组假值)

Falsy Bouncer

Falsy Bouncer

freeCodeCamp:Falsy Bouncer

Falsy Bouncer 过滤数组假值

从数组中删除未定义的值