从javascript数组中删除所有falsy值,包括NaN,但不包括0和空字符串

从javascript数组中删除所有falsy值,包括NaN,但不包括0和空字符串,javascript,arrays,filter,nan,falsy,Javascript,Arrays,Filter,Nan,Falsy,我有以下数组: const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false]; 我想filter()清除所有falsy值,除了'和0之外 我知道有一些有用的速记: return values.filter(Boolean) 但这会删除所有falsy值,包括'和0 我尝试了以下方法: return values.filter(value => [NaN, null, undefine

我有以下数组:

const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
我想
filter()
清除所有
falsy
,除了
'
0
之外

我知道有一些有用的速记:

return values.filter(Boolean)
但这会删除所有
falsy
值,包括
'
0

我尝试了以下方法:

return values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
尝试:


NaN
与自身不相等(即
NaN===NaN
的计算结果为false),因此将其与
indexOf
一起使用失败。另一种也能更好地传达您的目标(“筛选()出除“”和0之外的所有falsy值”)的方法如下:

const values=['',0,'one',NaN,1,'two',2,null,'three',未定义,3,false];
const filteredValues=values.filter(value=>value | | value===''| | value==0);

console.log(filteredvalue) 您也可以考虑使用<强> <强>,因为您可以检查一套是否包含“代码>楠< /COD>”,<代码>的时间复杂度<>代码> o(1)< /> >,而不是<代码> o(n)< /> >,其中n是需要检查的项的数量:

const values=['',0,'one',NaN,1,'two',2,null,'three',未定义,3,false];
const notAllowed=新集合([NaN,null,未定义,false]);
const result=values.filter(val=>!notAllowed.has(val));
控制台日志(结果)添加
&&!isNaN(值)
到过滤器的末尾?如果(…)
值不适合测试
0
values.filter(value => value || value === '' || value === 0);