Array.sort()。过滤器(...)在Javascript中为零

时间:2014-04-15 16:23:36

标签: javascript arrays

以下过滤器为什么不返回0?

[0, 5, 4].sort().filter(function(i){return i}) // returns : [4, 5]

5 个答案:

答案 0 :(得分:15)

0被视为假值。

您的过滤器功能实际上是为false返回0并从数组中过滤它。

请仔细检查this

答案 1 :(得分:6)

过滤器用于检查条件。您正在返回值本身,这不是正确的用法。 为此,它应该是

[0, 5, 4].sort().filter(function(i){return true;}); //[0,4,5] is returned

当您传递值本身时,所有非零数字等于truthy,0等于falsy值,因此被过滤器忽略。如果您仍然希望坚持这种方式,由于某种原因,将0括在引号内,这将解决问题。

[0, 5, 4].sort().filter(function(i){return i==0?'0':i;}) //[0,4,5] is returned

答案 2 :(得分:5)

默认情况下,

.filter()功能会从过滤后的输出中排除错误项目

// ----- falsy items in JS --------
false 
null 
undefined
0 
NaN
'' //Empty string
  

解决方案:

如果你还想保留它们,请记住这个简短的提示:

返回true以保留元素,否则为false

示例:

[0, 5, 4].sort().filter(function(i){
return true // returning true to keep i element
});

答案 3 :(得分:3)

要保持 0 ,但仍过滤掉 falsy 值,请尝试以下操作:

[0, 5, undefined, 4, null, 7, NaN, -4].sort().filter(function(item){
  return item || item === 0;
});

编辑:使用ES2015箭头功能进行重构

[0, 5, undefined, 4, null, 7, NaN, -4].sort().filter(item => item || item === 0);

答案 4 :(得分:1)

试试这个:

[0, 5, 4].sort().filter(function(i){
    return ((i) ? i : !i);
})