如何使用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
相关产品推荐
相关产品推荐

