假设我有两个对象数组,如下所示:
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
扩展每个对象,但我觉得这可能太复杂了。
答案 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;
仅供参考,在a jsperf的所有三个浏览器中,for
循环选项(第二个选项)看起来要快一些。
答案 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);