从 javascript 数组中删除所有虚假值,包括 NaN 但不包括 0 和空字符串
Removing all falsy values from a javascript array, including NaN but excluding 0 and empty strings
我有以下数组:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
我想 filter()
输出 所有 falsy
值 except 对于 ''
和 0
.
我知道有用shorthand:
return values.filter(Boolean)
但这会删除所有 falsy
值 ,包括 ''
和 0
.
我尝试了以下方法:
return values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
几乎是正确的...但它不会删除 NaN
。
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
const filteredValues = values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
console.log(filteredValues);
有什么方法可以达到与上一个示例相同的结果,同时删除 NaN
?
尝试:
values.filter(value => value || value === '' || value === 0);
NaN
不等于自身(即 NaN === NaN
计算为 false),因此将它与 indexOf
一起使用会失败。另一种方法也能更好地传达您的目标(“filter() out all the falsy values except for '' and 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);
你也可以考虑使用 Set 因为你可以检查一个集合是否包含 NaN
并且 has
的时间复杂度是O(1)
,而不是 O(n)
,其中 n 是您需要检查的项目数:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
const notAllowed = new Set([NaN, null, undefined, false]);
const result = values.filter(val => !notAllowed.has(val));
console.log(result);
我有以下数组:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
我想 filter()
输出 所有 falsy
值 except 对于 ''
和 0
.
我知道有用shorthand:
return values.filter(Boolean)
但这会删除所有 falsy
值 ,包括 ''
和 0
.
我尝试了以下方法:
return values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
几乎是正确的...但它不会删除 NaN
。
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
const filteredValues = values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
console.log(filteredValues);
有什么方法可以达到与上一个示例相同的结果,同时删除 NaN
?
尝试:
values.filter(value => value || value === '' || value === 0);
NaN
不等于自身(即 NaN === NaN
计算为 false),因此将它与 indexOf
一起使用会失败。另一种方法也能更好地传达您的目标(“filter() out all the falsy values except for '' and 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);
你也可以考虑使用 Set 因为你可以检查一个集合是否包含 NaN
并且 has
的时间复杂度是O(1)
,而不是 O(n)
,其中 n 是您需要检查的项目数:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
const notAllowed = new Set([NaN, null, undefined, false]);
const result = values.filter(val => !notAllowed.has(val));
console.log(result);