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

如何使用JavaScript高效移除对象数组中的重复项(适配千级长度数组场景)

高效移除JavaScript对象数组中的重复条目

针对你需要处理可能超过1000条的myData数组去重的需求,这里提供一个时间复杂度为**O(n)**的高效解决方案,比传统嵌套循环的O(n²)方法快得多,适合大数据量场景:

实现代码

首先是你的原始数据:

const data = { 
  myData: [ 
    { Type: 'REAL', Tenure: '12', Name: 'WEBPAGE' }, 
    { Type: 'REAL', Tenure: '24', Name: 'SERVER' }, 
    { Type: 'REAL', Tenure: '12', Name: 'WEBPAGE' }, 
  ], 
};

接下来是去重逻辑:

// 用Map存储唯一条目,键由对象的三个属性拼接生成,保证唯一性
const uniqueMap = new Map();

// 遍历数组,重复条目会自动覆盖(如果需要保留首次出现的条目,看下方补充)
data.myData.forEach(item => {
  // 生成唯一标识键:将Type、Tenure、Name拼接成字符串
  const uniqueKey = `${item.Type}-${item.Tenure}-${item.Name}`;
  uniqueMap.set(uniqueKey, item);
});

// 把Map的values转换为数组,得到去重后的结果
const result = {
  myData: Array.from(uniqueMap.values())
};

console.log(result);

执行后你会得到期望的输出:

{ 
  myData: [ 
    { Type: 'REAL', Tenure: '24', Name: 'SERVER' }, 
    { Type: 'REAL', Tenure: '12', Name: 'WEBPAGE' } 
  ] 
}

关键说明

  • 高效性:Map的set和has操作都是O(1)时间复杂度,遍历数组是O(n),所以整体复杂度是O(n),处理千条以上数据毫无压力。
  • 唯一性判断:我们通过拼接对象的Type、Tenure、Name三个属性生成唯一键,确保这三个属性完全相同的对象被判定为重复项。
  • 保留首次出现的重复项:如果不需要覆盖,而是想保留第一次出现的条目,只需要在set前加个判断:
    data.myData.forEach(item => {
      const uniqueKey = `${item.Type}-${item.Tenure}-${item.Name}`;
      // 只有当键不存在时才存入Map
      if (!uniqueMap.has(uniqueKey)) {
        uniqueMap.set(uniqueKey, item);
      }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:48:15