合并对象数组

Merge Array of Objects

我需要像这样在浏览器端合并对象数组 javascript:

[
  {name: "john", age: 10},
  {name: "doe", age: 14}
] 

--> 新数据到达

[
  {name: "pete", age: 88},
  {name: "larry", age: 42}
]

应该变成

[
  {name: "john", age: 10},
  {name: "doe", age: 14}, 
  {name: "pete", age: 88},
  {name: "larry", age: 42}
] 

好吧,简化后的数组将包含数百个较大的对象。因此我需要一个高效的解决方案。

在此先感谢您的 skeec

var arr3 = [];
for(var i in arr1){
   var shared = false;
   for (var j in arr2)
       if (arr2[j].name == arr1[i].name) {
           shared = true;
           break;
       }
   if(!shared) arr3.push(arr1[i])
}
arr3 = arr3.concat(arr2);

你可以使用 loadash

像这样:

var array = [1];
var other = _.concat(array, 2, [3], [[4]]);

console.log(other);
// → [1, 2, 3, [4]]

console.log(array);
// → [1]

或者对于 Json 你可以像这样使用扩展:

lodash.extend({}, mergeInto, toMerge)

假设您除了连接 2 个数组之外不需要任何其他东西,这非常简单,因为数组已经有了连接方法。

var arr1 = [
  {name: "pete", age: 88},
  {name: "larry", age: 42}
];

var arr2 = [
  {name: "pete", age: 88},
  {name: "larry", age: 42}
];

var concatArr = arr1.concat(arr2);

MDN Page on Array.prototype.concat

看来你可以只使用.push().concat()来组合这两个数组。数组中的内容并不重要,因为数组运算符只是抽象地处理数组的元素,而不知道其中的内容。

这是将新数组添加到现有数组的解决方案:

var data = [
  {name: "john", age: 10},
  {name: "doe", age: 14}
]; 


var newInfo = [
  {name: "pete", age: 88},
  {name: "larry", age: 42}
]

data = data.concat(newInfo);

或者,如果你真的想保留原始数组(而不是创建一个新数组),你可以像这样将新数组添加到原始数组的末尾:

data.push.apply(data, newInfo);