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

如何在JavaScript中根据Group和Name对数组对象去重

去除数组中Group和Name均重复的对象

原代码仅提取了Group字段的唯一值,无法实现同时去除Group和Name都重复的对象的需求(例:索引0与索引2的对象Group为'A'、Name为'SD',属于重复项,需仅保留一个)。

原代码

const data = [{
    id: 1,
    Group: 'A',
    Name: 'SD'
}, {
    id: 2,
    Group: 'B',
    Name: 'FI'
}, {
    id: 3,
    Group: 'A',
    Name: 'SD'
}, {
    id: 4,
    Group: 'B',
    Name: 'CO'
}];

let unique = [...new Set(data.map(item => item.Group))];
console.log(unique);

解决方案

方法1:使用Set过滤首次出现的对象

通过拼接Group和Name生成唯一标识键,用Set记录已出现的键,过滤数组时仅保留首次出现的对象:

const data = [{
    id: 1,
    Group: 'A',
    Name: 'SD'
}, {
    id: 2,
    Group: 'B',
    Name: 'FI'
}, {
    id: 3,
    Group: 'A',
    Name: 'SD'
}, {
    id: 4,
    Group: 'B',
    Name: 'CO'
}];

const seen = new Set();
const uniqueItems = data.filter(item => {
  const key = `${item.Group}-${item.Name}`;
  if (seen.has(key)) return false;
  seen.add(key);
  return true;
});

console.log(uniqueItems);
// 输出结果:[{id:1, Group:'A', Name:'SD'}, {id:2, Group:'B', Name:'FI'}, {id:4, Group:'B', Name:'CO'}]

方法2:使用Map存储唯一对象

利用reduce遍历数组,用Map存储每个复合键对应的对象,确保每个键仅对应一个对象,最后转换为数组:

const data = [{
    id: 1,
    Group: 'A',
    Name: 'SD'
}, {
    id: 2,
    Group: 'B',
    Name: 'FI'
}, {
    id: 3,
    Group: 'A',
    Name: 'SD'
}, {
    id: 4,
    Group: 'B',
    Name: 'CO'
}];

const uniqueItems = Array.from(
  data.reduce((map, item) => {
    const key = `${item.Group}-${item.Name}`;
    // 若需保留最后出现的重复对象,直接执行 map.set(key, item) 即可
    if (!map.has(key)) map.set(key, item);
    return map;
  }, new Map()).values()
);

console.log(uniqueItems);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:15:14