如何在Javascript中合并两个数组

时间:2016-12-12 18:18:52

标签: javascript arrays

First Array

[{'value':'one','other':'othervalue'},{value:'two'},{value:'three'},{value:'four'}]

第二阵列

['one','two','six','five']

这里我想将第二个数组值添加到第一个数组的value属性中,如果有唯一的.if dublicate exists代码必须跳过它。我试过循环所有的值,如

for( var i=0; i < eLength; i++ ) {
    for( var j = 0; j < rLength; j++ ) {
        if( temp[j].values != enteredValues[i] ) {

            console.log()

            var priority = enteredValues.indexOf( enteredValues[i] ) + 1;
            var obj = { 'values': enteredValues[i] };
        }
    }
    reportbody.push( obj) ;
}

3 个答案:

答案 0 :(得分:3)

通过使用循环数据设置对象,可以将对象用作对象数组中值的哈希表。

然后检查数组中是否有值,如果没有将新对象推送到数据数组。

&#13;
&#13;
var data = [{ value: 'one', other: 'othervalue' }, { value: 'two' }, { value: 'three' }, { value: 'four' }],
    values = ['one', 'two', 'six', 'five', 'six'],
    hash = Object.create(null);

data.forEach(function (a) {
    hash[a.value] = true;
});

values.forEach(function (a) {
    if (!hash[a]) {
        hash[a] = true;
        data.push({ value: a });
    }
});

console.log(data);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:1)

&#13;
&#13;
var original = [{'value':'one','other':'othervalue'},{value:'two'},{value:'three'},{value:'four'}];

var toAdd = ['one','two','six','five'];

// First make a dictionary out of your original array
// This will save time on lookups
var dictionary = original.reduce(function(p,c) {
      p[c.value] = c;
      return p;
  }, {});

// Now for each item in your new list
toAdd.forEach(function(i) {
  // check that it's not already in the dictionary
  if (!dictionary[i]) {
        // add it to the dictionary
        dictionary[i] = { value: i };
        // and to your original array
        original.push(dictionary[i]);
    }
  });

console.log(original);
&#13;
&#13;
&#13;

在这里制作字典我假设original没有任何重复开头。

答案 2 :(得分:1)

尽管使用哈希表或字典可能会有性能优势,但最直接的实现是

second.forEach(s => {
  if (!first.find(f => f.value === s)) first.push({value: s});
});

如果你想使用哈希表,从语义上讲,人们可能更喜欢使用Set:

const dict = new Set(first.map(f => f.value));
second.forEach(s => { if (!dict.has(s)) first.push({value: s}); });

上面的代码不会处理第二个数组中的重复项,因此如果这是一个问题,您需要相应地进行调整。