如何使用Javascript数组过滤器过滤0?

时间:2019-04-13 07:38:19

标签: javascript arrays filter

我需要从输入array(arr)获取包含所有0-s的新数组。

var a=arr.filter(function(val){
if((val===0)){
return val;
}
})

由于某种原因,它将返回一个空数组,例如,如果我尝试获取数组中所有非0值

var a=arr.filter(function(val){

    if(!(val===0)){
    return val;
    }
    })

此代码可以正常工作。

为什么?

1 个答案:

答案 0 :(得分:2)

让我们逐步讲解这些,但首先我们需要看看“真/假”的定义

  

来自MDN docs:在JavaScript中,真实值是在布尔上下文中遇到时被视为true的值。除非将其定义为虚假(即false,0,“”,null,undefined和NaN除外),否则所有值都是真实的。


您的第一个示例:

if((val===0)){
   return val;
}

第一个仅返回零,而您返回这些零。零是虚假的,因此将它们排除在外。

其他值没有返回值,并且没有显式return语句的函数总是返回undefined ...这是虚假的。

所以两个条件都返回falsy并且结果为空数组

第二个示例

if(!(val===0)){
   return val;
}

返回零以外的任何值,然后返回值。

所有非零数字都是真实的,因此您将所有数字都放在数组中。

由于没有明确的返回值再次返回未定义的值,所以零被排除了


如何过滤以正确的true / false返回非零值?

 return val !== 0;