组合两个数组的相同索引对象

时间:2015-12-03 21:36:09

标签: javascript arrays object

假设我有两个对象数组,如下所示:

var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
var arr2 = [{age: 22}, {age: 30}];

我想要一个像这样的组合数组:

var arr3 = [{name: 'jay', age: 22}, {name: 'Bob', age: 30}];

您可以放心地假设两个初始数组将具有彼此匹配的索引,这意味着arr1的索引0将始终与arr2的索引0一起使用。

实现这一目标的最快方法是什么?我想象一个forEach循环嵌套在另一个forEach循环中,并使用arr1中的当前对象从arr2扩展每个对象,但我觉得这可能太复杂了。

4 个答案:

答案 0 :(得分:5)

您可以使用第一次迭代中的索引迭代一个数组并创建一个新数组。有很多方法可以做到这一点。这是一个:



    var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
    var arr2 = [{age: 22}, {age: 30}];

    var combined = arr1.map(function(item, index) {
        return {name: item.name, age: arr2[index].age};
    });
    document.write(JSON.stringify(combined));




如果您真的想要获得最高性能,则必须在许多不同的浏览器中测试多种方案。例如,有时在某些浏览器中,for循环比内置数组方法更快。



var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
var arr2 = [{age: 22}, {age: 30}];
var combined = [];

for (var i = 0; i < arr1.length; i++) {
  combined[i] = {name: arr1[i].name, age: arr2[i].age};
}

document.write(JSON.stringify(combined));
&#13;
&#13;
&#13;

仅供参考,在a jsperf的所有三个浏览器中,for循环选项(第二个选项)看起来要快一些。

enter image description here

答案 1 :(得分:0)

最简单的解决方案是(与任何类似lib libs或类似的工具库相比)。它的优点是没有任何依赖性。

var result = [];
for(var i = 0; i < arr1.length; i+= 1) {
  item = {};
  item.name = arr1[i].name;
  item.age = arr2[i].age;
  result.push(item);
}

答案 2 :(得分:0)

在for循环中:

var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
var arr2 = [{age: 22}, {age: 30}];


for(var i in arr1)
{
  arr1[i]['age'] = arr2[i]['age'];
}

console.log(arr1) //[Object { name="Jay",  age=22}, Object { name="Bob",  age=30}]

现在你在arr1中得到了合并的结果。

答案 3 :(得分:0)

更松散耦合的解决方案是使用lodash库的merge功能。

这与对象中的键和键名的数量无关。因此,将来如果您决定向对象添加键,则无需更新代码以合并对象。

var _ = require('lodash');

var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
var arr2 = [{age: 22}, {age: 30}];
var arr3 = [];

for (var i=0; i<arr1.length; i++) {
    arr3.push(_.merge(arr1[i], arr2[i]));
}

console.log(arr3);