如果值不存在,则将数组对象推入另一个数组对象

Raj*_*a O 3 javascript arrays object

如果值不存在,需要将数组对象(arr1)的值推送到另一个数组对象(arr2)中。现有值不会推入另一个数组。

var arr1 = [{
    name: 'fred'
}, {
    name: 'bill'
}, {
    name: 'ted'
}, {
    name: 'james'
}];

var arr2 = [{
    name: 'spil'
}, {
    name: 'fred'
}, {
    name: 'bill'
},{
    name: 'paul'
}, {
    name: 'stone'
}];

function add(name) {
    var found = arr1.some(function (el) {
      return el.name === name;
    });
    if (!found) {
        arr1.push(arr2);
    }
    return arr2;
}
Run Code Online (Sandbox Code Playgroud)

小提琴

Nin*_*olz 6

如果 name 属性已存在于arr1. 如果没有将实际项目推送到arr1

var arr1 = [{ name: 'fred' }, { name: 'bill' }, { name: 'ted' }, { name: 'james' }],
    arr2 = [{ name: 'toString' }, { name: 'spil' }, { name: 'fred' }, { name: 'bill' }, { name: 'paul' }, { name: 'stone' }],
    hash = Object.create(null);

arr1.forEach(function (a) {
    hash[a.name] = true;
});
arr2.forEach(function (a) {
    hash[a.name] || arr1.push(a);
});

console.log(arr1);
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

只是为了弄清楚,为什么Object.create(null),一个真正的空对象作为哈希而不是{}一个空对象。注意该项目{ name: 'toString' }。在第一部分中,该项目被插入,在第二部分中则没有,因为hash它有一个名为 的属性toString

var arr1 = [{ name: 'fred' }, { name: 'bill' }, { name: 'ted' }, { name: 'james' }],
    arr2 = [{ name: 'toString' }, { name: 'spil' }, { name: 'fred' }, { name: 'bill' }, { name: 'paul' }, { name: 'stone' }],
    hash = {}; // now an object

arr1.forEach(function (a) {
    hash[a.name] = true;
});
arr2.forEach(function (a) {
    hash[a.name] || arr1.push(a);
});

console.log(arr1);
Run Code Online (Sandbox Code Playgroud)