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

Rou*_*ica 3 javascript arrays nan filter falsy

我有以下数组:

const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
Run Code Online (Sandbox Code Playgroud)

我想filter()所有falsy,除了''0

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

return values.filter(Boolean)
Run Code Online (Sandbox Code Playgroud)

但这会删除包括在内的所有falsy值。 ''0

我尝试了以下方法:

return values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
Run Code Online (Sandbox Code Playgroud)

它几乎是正确的......但它不会删除NaN.

const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
Run Code Online (Sandbox Code Playgroud)

有什么方法可以达到与上一个示例相同的结果,但也可以删除NaN

Utk*_*nos 5

尝试:

values.filter(value => value || value === '' || value === 0);
Run Code Online (Sandbox Code Playgroud)


str*_*str 5

NaN不等于自身(即NaN === NaN评估为假),因此使用它indexOf失败。另一种可以更好地传达您的目标(“filter() 除 '' 和 0” 之外的所有虚假值)的方法如下:

const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
const filteredValues = values.filter(value => value || value === '' || value === 0);
console.log(filteredValues);
Run Code Online (Sandbox Code Playgroud)