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

标签 javascript arrays object

如果值不存在,需要将数组对象(arr1) valeus 压入另一个数组对象(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;
}

Fiddle

最佳答案

如果名称属性已经在 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);

附言

澄清一下,为什么 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);

关于javascript - 如果值不存在,则将数组对象插入另一个数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38068424/

相关文章:

arrays - 不同文件的字节数-127至127

arrays - 按值删除 jsonb 数组元素

perl - 访问Dancer Log对象?

c++ - 如何使用函数更新 c++ 类成员?

javascript - MomentJS - 一种获取过去 24 小时每小时价格的更简洁的方法

IntelliJ 的 "IDE scripting console"中的 Javascript

javascript - 正则表达式 - 任何一个或多个字符后跟一个换行符和等号

java - 如何轻松打印数组?

javascript - 如何使用 javascript 在 anchor 标记中动态提供网站导航

javascript - 如何动态添加事件监听器