以下过滤器为什么不返回0?
[0, 5, 4].sort().filter(function(i){return i}) // returns : [4, 5]
答案 0 :(得分:15)
答案 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);
})