javascript - 如何在 Javascript 中比较对象数组内的对象数组并删除重复的对象?

标签 javascript arrays object duplicates

我有一个对象数组,其中包含对象中的数组。 我想删除对象数组的对象数组内的重复对象。

var arr = {

 "departsObj": {

"departments": [
  {
    "department": [
      {
        "groupID": "21",
        "groupName": "group21",
        "requestDate": "2020-01-24",           
      },
      {
        "groupID": "28",
        "groupName": "group28",
        "requestDate": "2020-01-24",            
      }
    ] 
  },
  {
    "department": [
      {
        "groupID": "28",
        "groupName": "group28",
        "requestDate": "2020-01-24",
      },
      {
        "groupID": "20",
        "groupName": "group20",
        "requestDate": "2020-01-24",
      },
      {
        "groupID": "30",
        "groupName": "group30",
        "requestDate": "2020-01-24",
      }
    ] 
  }
]
 }
 }

我需要返回数组:

{
  "departsObj": {

"departments": [
  {
    "department": [
      {
        "groupID": "21",
        "groupName": "group21",
        "requestDate": "2020-01-24",           
      },
      {
        "groupID": "28",
        "groupName": "group28",
        "requestDate": "2020-01-24",            
      }
    ] 
  },
  {
    "department": [ 
      {
        "groupID": "20",
        "groupName": "group20",
        "requestDate": "2020-01-24",
      },
      {
        "groupID": "30",
        "groupName": "group30",
        "requestDate": "2020-01-24",
      }
    ] 
  }
]
 }
  }

我已经尝试过:

const arr = departsObj.departments;

var result = arr.reduce((unique, o) => {
if(!unique.some(obj => obj.department === o.department)) {
  unique.push(o);
}
return unique;
},[]);

return result;

但我仍然返回重复的对象。 我正在努力从数组对象的对象数组返回值。

如有任何帮助,我们将不胜感激。

提前致谢。

最佳答案

您的代码无法正常工作的原因之一是您无法使用简单的数组比较来确定数组是否包含重复值(此外,您正在将对象减少为数组,即使您的预期输出是一个对象)。

您可以使用Set跟踪已经看到的每个groupID,以便对嵌套对象中的数组进行重复数据删除。

const obj = { departsObj: { departments: [{ department: [{ groupID: "21", groupName: "group21", requestDate: "2020-01-24" }, { groupID: "28", groupName: "group28", requestDate: "2020-01-24" } ] }, { department: [{ groupID: "28", groupName: "group28", requestDate: "2020-01-24" }, { groupID: "20", groupName: "group20", requestDate: "2020-01-24" }, { groupID: "30", groupName: "group30", requestDate: "2020-01-24" }] }] } };
const seen = new Set();
obj.departsObj.departments = obj.departsObj.departments.filter((d) => {
  d.department = d.department.filter((g) => {
    if (!seen.has(g.groupID)) {
      seen.add(g.groupID);
      return true;
    }
  
    return false;
  });
  
  if (d.department.length) {
    return true;
  }
  
  return false;
});

console.log(obj);
// {"departsObj":{"departments":[{"department":[{"groupID":"21","groupName":"group21","requestDate":"2020-01-24"},{"groupID":"28","groupName":"group28","requestDate":"2020-01-24"}]},{"department":[{"groupID":"20","groupName":"group20","requestDate":"2020-01-24"},{"groupID":"30","groupName":"group30","requestDate":"2020-01-24"}]}]}}

关于javascript - 如何在 Javascript 中比较对象数组内的对象数组并删除重复的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59902123/

相关文章:

javascript - 无法读取 javascript 错误中未定义的属性 'preventDefault'

javascript - 从另一个作用域引用 "instanceof"/prototype

java - 如何填充 100,000,000 个元素的数组?

php - 如何将 url-array-parameter 传递给 pg_execute

java - 不同对象的 C++ 数组?知道如何在 Java 中实现

Java 对象数组 Foreach 方法访问

javascript - 想要在yii2中点击另一个div时显示div

javascript - 多边形中的孔导致 Three.js 中的三 Angular 剖分失败

arrays - Julia,将 2d 数组合并到 3d 数组上?

c++ - 在其他私有(private)类成员中使用私有(private)类成员