kev*_*vin 2 javascript arrays nan
我正在 freecodecamp 上进行算法挑战,他们提供的解决方案非常整洁:
function bouncer(arr) {
return arr.filter(Boolean);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,作为一个菜鸟并且没有考虑那个高阶函数,我创建了这个冗长的怪物:
function bouncer(arr) {
let truthyArray = [];
let falsyArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] == false || arr[i] === null || arr[i] === NaN || arr[i] === undefined) {
falsyArray.push(arr[i]);
} else {
truthyArray.push(arr[i]);
}
}
return truthyArray;
}
Run Code Online (Sandbox Code Playgroud)
在之前的测试中,它似乎完成了工作。然而,NaN 并没有配合。
bouncer([1, null, NaN, 2, undefined])
Run Code Online (Sandbox Code Playgroud)
返回:
[1, NaN, 2]
Run Code Online (Sandbox Code Playgroud)
关于如何测试 NaN 有什么想法吗?
问题是NaN !== NaN:
console.log(NaN === NaN);Run Code Online (Sandbox Code Playgroud)
(这是有道理的,因为NaN它只是一个占位符,用于表示需要数字的位置,但无法计算数值 - 例如,0 / 0( NaN) !== ('foo' * 3)( NaN))
相反,您可以使用Number.isNaN,它将检查传递的值是否是 aNumber和 is NaN。
console.log(Number.isNaN(NaN));
function bouncer(arr) {
let truthyArray = [];
let falsyArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] == false || arr[i] === null || Number.isNaN(arr[i]) || arr[i] === undefined) {
falsyArray.push(arr[i]);
} else {
truthyArray.push(arr[i]);
}
}
return truthyArray;
}
console.log(bouncer([false, null, 0, NaN, undefined, ""]));Run Code Online (Sandbox Code Playgroud)
确保使用Number.isNaN而不是 plain isNaN,这会意外地排除真实的非数字。
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |