You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:33:11