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

标签 javascript arrays

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

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/

相关文章:

javascript - 如何将模态对话框确认结果传递回调用函数?

c++ - 与 MKL 一起使用的数组类型

javascript - 使用 javascript 在 Json 中寻址 String 变量

javascript - 有没有最近的 Lua 到 JavaScript 的转换器或解释器?

javascript - 如何从curl命令转换为ajax请求

类似于 PHP 的 C# 多维数组

arrays - 声明数组时出现Verilog错误

javascript - 如何测试从父组件传递的子组件中的回调单击?

javascript - 将数组转换为嵌套对象

python - NumPy 数组中的第一个和最后一个元素