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

如何获取对象数组中重复值的ID及被删除的重复对象集合

按指定字段去重对象数组并提取重复元素

我有一段JavaScript代码,能按id、Light、type三个字段对对象数组进行去重,运行效果正常:

var data = [
  {"id":"1","Group":"Wohnzimmer","Light":"Diele", "type":"ct"},
  {"id":"1","Group":"Wohnzimmer","Light":"Diele", "type":"ct"},
  {"id":"2","Group":"Wohnzimmer","Light":"Diele", "type":"bri"},
  {"id":"3","Group":"Wohnzimmer","Light":"Diele", "type":"color"},
  {"id":"3","Group":"Wohnzimmer","Light":"Diele", "type":"color"},
]

var a = data.reduce((accumulator, current) => {
  if (checkIfAlreadyExist(current)) {
    return accumulator;
  } else {
    return [...accumulator, current];
  }

  function checkIfAlreadyExist(currentVal) {
    return accumulator.some((item) => {
      return (item.id === currentVal.id &&
              item.Light === currentVal.Light &&
              item.type === currentVal.type);
    });
  }
}, []);
            
console.log(a);

原代码运行后得到的去重结果:

[{
  Group: "Wohnzimmer",
  id: "1",
  Light: "Diele",
  type: "ct"
}, {
  Group: "Wohnzimmer",
  id: "2",
  Light: "Diele",
  type: "bri"
}, {
  Group: "Wohnzimmer",
  id: "3",
  Light: "Diele",
  type: "color"
}]

现在需要同时获取被剔除的重复对象集合,期望结果如下:

[{
  Group: "Wohnzimmer",
  id: "1",
  Light: "Diele",
  type: "ct"
},{
  Group: "Wohnzimmer",
  id: "3",
  Light: "Diele",
  type: "color"
}]

修改方案

可以调整reduce的累加器结构,同时存储去重后的数组和重复元素数组,具体代码如下:

var data = [
  {"id":"1","Group":"Wohnzimmer","Light":"Diele", "type":"ct"},
  {"id":"1","Group":"Wohnzimmer","Light":"Diele", "type":"ct"},
  {"id":"2","Group":"Wohnzimmer","Light":"Diele", "type":"bri"},
  {"id":"3","Group":"Wohnzimmer","Light":"Diele", "type":"color"},
  {"id":"3","Group":"Wohnzimmer","Light":"Diele", "type":"color"},
]

const { uniqueItems, duplicates } = data.reduce((acc, current) => {
  const exists = acc.uniqueItems.some(item => 
    item.id === current.id && 
    item.Light === current.Light && 
    item.type === current.type
  );
  
  if (exists) {
    acc.duplicates.push(current);
  } else {
    acc.uniqueItems.push(current);
  }
  
  return acc;
}, { uniqueItems: [], duplicates: [] });

console.log('去重结果:', uniqueItems);
console.log('重复元素:', duplicates);

代码说明

  • 累加器初始化为包含uniqueItems(存储去重后元素)和duplicates(存储重复元素)的对象
  • 遍历每个元素时,检查是否已存在于uniqueItems中
  • 若存在则将当前元素加入duplicates数组,否则加入uniqueItems数组
  • 最后通过解构赋值分别获取两个结果数组

运行后duplicates数组就是需要的被删除的重复对象集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:05:18