如何用JavaScript从数组中筛选唯一数字并移除其他类型与重复项?
问题分析与解决
你的代码输出空数组的核心原因是:typeof运算符返回的是字符串类型的结果(比如对数字返回'number'),但你写的typeof originalArray[i] === Number是在和构造函数Number比较,条件永远不成立,因此没有元素被加入新数组。
修复原代码
把typeof的判断值改成字符串'number',如果需要额外排除NaN(因为typeof NaN也会返回'number'),可以加上!isNaN(item)的判断:
let originalArray = [1,2,2,3,3, null,false,undefined]; let newArray = []; let set = new Set(); for (let i = 0; i < originalArray.length; i++) { const item = originalArray[i]; if(!set.has(item) && typeof item === 'number' && !isNaN(item)) { newArray.push(item); set.add(item); } } console.log(newArray); // 输出 [1,2,3]
更简洁的写法
可以结合Array.filter()和Set实现更简洁的逻辑:
let originalArray = [1,2,2,3,3, null,false,undefined]; const uniqueNumbers = [...new Set( originalArray.filter(item => typeof item === 'number' && !isNaN(item)) )]; console.log(uniqueNumbers); // 输出 [1,2,3]
逻辑说明:
- 先用
filter筛选出所有数字类型且非NaN的元素 - 利用
Set自动去重的特性处理筛选后的数组 - 最后用扩展运算符
...将Set转回数组格式
若确定数组中不会出现NaN,可以去掉!isNaN(item)的判断。
内容的提问来源于stack exchange,提问作者Manjula Dhamodharan
相关产品推荐
相关产品推荐

