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

如何移除JavaScript对象数组中的重复category?

移除对象数组中重复category的实现方法

针对你提供的costItems数组,要移除重复category对应的对象、只保留一个,这里有几种实用的实现方式:

方法一:使用Array.filter() + Set

这种方法会保留第一次出现的category对象,利用Set的唯一性跟踪已处理过的分类:

const seenCategories = new Set();
const uniqueCostItems = costItems.filter(item => {
  if (seenCategories.has(item.category)) return false;
  seenCategories.add(item.category);
  return true;
});

方法二:使用Array.reduce()

这种方法可灵活控制保留重复项中的第一个或最后一个:

  • 保留最后出现的对象(后续重复项覆盖之前的):
const uniqueCostItems = Object.values(
  costItems.reduce((acc, item) => {
    acc[item.category] = item;
    return acc;
  }, {})
);
  • 保留第一次出现的对象:
const uniqueCostItems = Object.values(
  costItems.reduce((acc, item) => {
    if (!acc[item.category]) {
      acc[item.category] = item;
    }
    return acc;
  }, {})
);

方法三:使用Map

Map的键具有唯一性,同样支持选择保留第一个或最后一个对象:

const categoryMap = new Map();
costItems.forEach(item => {
  // 保留第一个:仅当Map中无该category时添加
  if (!categoryMap.has(item.category)) {
    categoryMap.set(item.category, item);
  }
  // 保留最后一个:直接覆盖即可,注释掉上面判断,用这行:categoryMap.set(item.category, item);
});
const uniqueCostItems = Array.from(categoryMap.values());

以上几种方法都能实现需求,你可以根据场景选择合适的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:10:36