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

la1*_*ch3 1 javascript arrays object

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

var arr1 = [{name: 'Jay'}, {name: 'Bob'}];
var arr2 = [{age: 22}, {age: 30}];
Run Code Online (Sandbox Code Playgroud)

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

var arr3 = [{name: 'jay', age: 22}, {name: 'Bob', age: 30}];
Run Code Online (Sandbox Code Playgroud)

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

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

jfr*_*d00 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));
Run Code Online (Sandbox Code Playgroud)

如果您真的想要最高性能,则必须在许多不同的浏览器中测试多种方案.例如,有时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));
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

  • 添加了jsperf参考和屏幕截图. (3认同)