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

ben*_*nek 10 javascript arrays

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

[0, 5, 4].sort().filter(function(i){return i}) // returns : [4, 5]
Run Code Online (Sandbox Code Playgroud)

Kyl*_*yle 15

0 被认为是一种虚假价值.

您的滤波函数基本上返回false用于0和从阵列过滤它.

看看这个是为了更深入的了解.


viv*_*_nk 7

filter是检查条件.您正在返回值本身,这不是正确的用法.对此应该是

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

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

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


Mal*_*lil 5

.filter()默认情况下,函数会从过滤后的输出中排除虚假项目.

// ----- falsy items in JS --------
false 
null 
undefined
0 
NaN
'' //Empty string
Run Code Online (Sandbox Code Playgroud)

方案:

如果您仍想保留它们,请记住以下简短提示:


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

示例:

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


Dav*_*eza 5

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

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

编辑:用 ES2015 箭头函数重构

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