gpt4 book ai didi

javascript - 从 Array of Array(嵌套的对象数组)中删除重复项

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:48 25 4
gpt4 key购买 nike

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

var arr1 = [{
child: [{name: "google", check: false}, {name: "yahoo", check: false}]
},
{
child: [{name: "excite", check: false}, {name: "facebook", check: false}]
},
{
child: [{name: "something1", check: false}, {name: "something2", check: false}]
}
]

var arr2 = [{
child: [{name: "google", check: true}, {name: "yahoo", check: false}]
},
{
child: [{name: "excite", check: false}, {name: "facebook", check: false}]
}
]

var arr3 = [{
child: [{name: "google", check: true}, {name: "yahoo", check: false}]
},
{
child: [{name: "excite", check: false}, {name: "facebook", check: false}]
},
{
child: [{name: "something1", check: false}, {name: "something2", check: false}]
}
]

我想从第二个子数组中删除 {name: "google", check: false} 因为已经有一个具有相同名称和 check: truearr1 中。

下面是我试过的东西。

function mergeAndRemoveDuplicates(arr1, arr2) {

return arr1.map(function(child) {
return child.some(function(children) {
return arr2.map(function(child2) {
return child2.some(function(children2) {
return children.name === children2.name &&
children.check === true;
});
})
})
})
}

console.log(mergeAndRemoveDuplicates(arr1, arr2));

http://jsfiddle.net/g7rvbpf3/

最佳答案

您可以创建一组经过检查的名称并递归地过滤数组:

const dupes = new Set;

for(const el of arr1.concat(arr2))
el.child = el.child.filter(el => {
const dupe = dupes.has(el.name);
if(el.check) dupes.add(el.name);
return !dupe;
});

这也将过滤 arr1 中的重复项,如果不需要,您可以使用 arr1 构建集合,然后过滤 arr2:

 const dupes = new Set;

for(const child of arr1.flatMap(it => it.child))
if(child.checked) dupes.add(child.name);

for(const el of arr2)
el.child = el.child.filter(it => !dupes.has(it.name));

要在末尾获得一个数组(我想这就是您所说的“合并”的意思),您可以.concat 一个到另一个。

关于javascript - 从 Array of Array(嵌套的对象数组)中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54984841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com