我有一个对象数组,其中包含对象中的数组。 我想删除对象数组的对象数组内的重复对象。
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/