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

如何对对象数组去重并为每个对象新增count计数字段?

对象数组去重并添加计数字段的简便实现

可以通过缓存映射的方式高效实现,一次遍历就能完成去重和计数,时间复杂度为O(n),比嵌套循环的O(n²)更高效。以下是两种常用实现方式:

方法一:使用普通对象作为缓存

// 原始数组
const originalArray = [
  { id: 2, name: 'Adventure' },
  { id: 6, name: 'Crime' },
  { id: 2, name: 'Adventure' },
  { id: 3, name: 'Beautiful' },
  { id: 7, name: 'Drama' },
  { id: 2, name: 'Adventure' }
];

const countMap = {};
originalArray.forEach(item => {
  // 以id作为唯一标识(如果需要更严格的去重,可以用`${item.id}-${item.name}`作为键)
  const key = item.id;
  if (countMap[key]) {
    countMap[key].count++;
  } else {
    // 复制原对象并初始化count为1
    countMap[key] = { ...item, count: 1 };
  }
});

// 将缓存对象的值转为数组,得到最终结果
const resultArray = Object.values(countMap);
console.log(resultArray);

方法二:使用Map对象作为缓存

Map的键支持多种类型,比普通对象更灵活:

const originalArray = [
  { id: 2, name: 'Adventure' },
  { id: 6, name: 'Crime' },
  { id: 2, name: 'Adventure' },
  { id: 3, name: 'Beautiful' },
  { id: 7, name: 'Drama' },
  { id: 2, name: 'Adventure' }
];

const countMap = new Map();
originalArray.forEach(item => {
  const key = item.id;
  if (countMap.has(key)) {
    countMap.get(key).count++;
  } else {
    countMap.set(key, { ...item, count: 1 });
  }
});

// 将Map的值转为数组
const resultArray = Array.from(countMap.values());
console.log(resultArray);

两种方法最终都会输出你期望的结果:

[
  { id: 2, name: 'Adventure', count: 3 },
  { id: 6, name: 'Crime', count: 1 },
  { id: 3, name: 'Beautiful', count: 1 },
  { id: 7, name: 'Drama', count: 1 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:55:10