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

如何从对象数组中移除重复元素并生成新数组

移除对象数组中的重复元素

针对你给出的包含重复对象的数组,我们可以通过几种实用的JavaScript方法实现去重,最终得到只包含唯一对象的新数组。

方法1:利用Set高效去重(推荐)

这种方法借助Set跟踪已出现的item值,结合filter过滤数组,时间复杂度为O(n),处理大数据组时效率更高:

let arr = [{item: 'abc'},{item: 'def'},{item: 'abc'},{item: 'ghi'}];
const seenItems = new Set();
const newArr = arr.filter(obj => {
  if (seenItems.has(obj.item)) {
    return false;
  }
  seenItems.add(obj.item);
  return true;
});

console.log(newArr); // 输出: [{item: 'abc'},{item: 'def'},{item: 'ghi'}]

原理说明

  • seenItems作为集合存储已处理过的item值,天然保证唯一性
  • 遍历数组时,若当前对象的item已在集合中则过滤掉,否则保留对象并将item加入集合

方法2:使用reduce构建去重数组

如果不想额外创建集合对象,可以用reduce累加生成去重后的数组,适合处理小型数组:

let arr = [{item: 'abc'},{item: 'def'},{item: 'abc'},{item: 'ghi'}];
const newArr = arr.reduce((uniqueArr, currentObj) => {
  // 检查累加器中是否已有相同item的对象
  const isDuplicate = uniqueArr.some(obj => obj.item === currentObj.item);
  if (!isDuplicate) {
    uniqueArr.push(currentObj);
  }
  return uniqueArr;
}, []);

console.log(newArr);

原理说明

  • uniqueArr是累加器,初始值为空数组,用来存储去重后的结果
  • 每次遍历当前对象时,用some检查累加器中是否存在相同item的对象,不存在则推入累加器

扩展:多字段去重(可选)

如果你的对象包含多个字段,需要基于多个字段判断重复,可以将字段拼接成唯一键来扩展逻辑:

// 示例:基于item和id字段去重
let arr = [{item: 'abc', id: 1},{item: 'def', id: 2},{item: 'abc', id: 1},{item: 'ghi', id: 3}];
const seenKeys = new Set();
const newArr = arr.filter(obj => {
  const uniqueKey = `${obj.item}-${obj.id}`;
  if (seenKeys.has(uniqueKey)) return false;
  seenKeys.add(uniqueKey);
  return true;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:52:38