首页 文章

从数组中删除Falsy值

提问于
浏览
0

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

  • 0

    返回值!==''|| false || null || undefined || NaN;

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

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

    value !== '' 时,与大多数情况一样,此表达式为真 . 你真的需要检查

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

    但是因为无论如何这些都是假的并且 Array.filter 只关心真实和虚假,你可以用你的 truthy 替换你的 truthy 函数

    function truthy(value) {
      return value;
    }
    

    这甚至不值得突破三行:

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

    除了AuxTaco's answer ......

    • “所有假值”也包括0 .

    • 通过使用Boolean作为函数,可以进一步缩短过滤器表达式:

    function bouncer(arr) {
      return arr.filter(Boolean);
    }
    
    console.log(bouncer([7, "ate", "", false, 9, 0, NaN, null, undefined]));
    
  • 5

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

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

    应该是这样的

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

相关问题