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

如何去除包含字符串格式数字的JavaScript数组中的重复项?

处理混合数字与字符串数字的数组去重问题

你的问题核心在于默认去重逻辑用了**严格相等(===)**判断,数字1和字符串"1"会被判定为不同元素,导致去重不彻底。解决思路是先统一元素类型,再执行去重操作,以下是几种可行方案:

方案一:结合filter与Set高效去重

用Set快速记录已出现的数字,避免重复遍历,效率较高:

const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"];
const seen = new Set();
const uniqueArr = arr1.filter(item => {
  // 将元素统一转为数字类型
  const num = Number(item);
  if (!seen.has(num)) {
    seen.add(num);
    return true;
  }
  return false;
});
console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]

方案二:先统一类型再用Set去重

写法更简洁,先把所有元素转成数字,再利用Set自动去重的特性:

const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"];
const uniqueArr = [...new Set(arr1.map(item => Number(item)))];
console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]

方案三:仅用filter实现(无需额外数据结构)

如果不想依赖Set,可在filter内部遍历前置元素并统一类型判断:

const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"];
const uniqueArr = arr1.filter((item, index, self) => {
  const currentNum = Number(item);
  // 检查当前元素之前的所有元素转成数字后是否重复
  return self.slice(0, index).every(prev => Number(prev) !== currentNum);
});
console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]

以上方案均能得到你期望的纯数字去重数组,其中方案一、二的时间复杂度更低,适合处理大体积数组。

内容的提问来源于stack exchange,提问作者user21951352

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:08