JS如何连接数组的数组

JS how to concat arrays of arrays

更具体地说,有没有更简单的方法:

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];

test0.forEach(
    function(item0, index) {
        test1[index].forEach(
            function(item1) {
                item0.push(item1);
            }
        );
    }
);

我曾尝试在 forEach() 的第一级使用 concat(),但由于我仍然无法理解的原因,它不起作用...

编辑: 感谢您的第一个答案。 奖金问题,为什么这个不起作用?

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];

test0.forEach(
    function(item, index) {
        item.concat(test1[index]);
    }
);

提前致谢

一个选项是使用 .map 并展开两个数组,从另一个较大数组中的适当索引获取第二个内部数组:

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];

console.log(test0.map((arr, i) => [...arr, ...test1[i]]));

使用Array.map and Spread Syntax

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];
test0 = test0.map((a,i) => [...a, ...test1[i]]);
console.log(test0);

基准:https://jsperf.com/merge-array-based-on-index

let test0 = [[0,2,4], [1,3,5]];
let test1 = [[6,8], [7,9,11]];
let result = []
for (let i = 0; i < test0.length; i++) {
 result[i] = [...test0[i], ...test1[i]]
}

console.log(result)

任意数量数组的解决方案。

var test0 = [[0, 2, 4], [1, 3, 5]],
    test1 = [[6, 8], [7, 9, 11]],
    result = [test0, test1].reduce((a, b) => a.map((v, i) => [...v, ...b[i]]))

console.log(result);

concat 会生成一个新数组,而不是修改当前数组。所以为了让它工作,你需要将新生成的数组分配回同一索引上的父数组。

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];

test0.forEach(
    function(item, index) {
        test0[index] = item.concat(test1[index]);
    }
);
console.log(test0);

或者您可以使用 map

var test0 = [[0,2,4], [1,3,5]];
var test1 = [[6,8], [7,9,11]];

var mergedArray = test0.map(
    function(item, index) {
        return item.concat(test1[index]);
    }
);
console.log(mergedArray);

ES6解决方案

我更喜欢使用 concat 来传播语法,因为这样可读性更好。

let test0 = [[0,2,4], [1,3,5]];
let test1 = [[6,8], [7,9,11]];

console.log(test0.map((arr, i) => arr.concat(test1[i])));