比较两个对象数组,并删除第二个具有相同属性值的项目

rab*_*ben 10 javascript arrays object

我需要做的就是比较两个对象数组,并删除第二个具有相同属性值的项目.例如:

var a = [{'name':'bob', 'age':22}, {'name':'alice', 'age':12}, {'name':'mike', 'age':13}];
var b = [{'name':'bob', 'age':62}, {'name':'kevin', 'age':32}, {'name':'alice', 'age':32}];

function remove_duplicates(a, b) {
    for (var i = 0, len = a.length; i < len; i++) {
        for (var j = 0, len = b.length; j < len; j++) {
            if (a[i].name == b[j].name) {
                b.splice(j, 1);
            }
        }
    }

    console.log(a);
    console.log(b);

}

console.log(a);
console.log(b);

remove_duplicates(a,b);
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这不起作用而是给出:

Uncaught TypeError: Cannot read property 'name' of undefined
Run Code Online (Sandbox Code Playgroud)

我期望的是b中的以下内容:

[{'name':'kevin', 'age':32}];
Run Code Online (Sandbox Code Playgroud)

Sni*_*pet 17

小提琴

 for (var i = 0, len = a.length; i < len; i++) { 
        for (var j = 0, len2 = b.length; j < len2; j++) { 
            if (a[i].name === b[j].name) {
                b.splice(j, 1);
                len2=b.length;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Geo*_*ole 5

除了使用两个循环,您还可以使用 findIndex 函数:

for (var i = 0, len = a.length; i < len; i++) {
    var ItemIndex = b.findIndex(b => b.name === a[i].name);

    a.splice(ItemIndex, 1)
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想完全不使用循环,你可以使用 forEach 函数

a.forEach(function(item, index, array) {
    var ItemIndex = b.findIndex(b => b.name === item.name);

    a.splice(ItemIndex, 1)
}
Run Code Online (Sandbox Code Playgroud)