JS如何连接数组数组

时间:2018-08-14 09:02:57

标签: javascript arrays concat

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

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);
            }
        );
    }
);

我尝试在concat()的第一级使用forEach(),但由于仍然无法逃脱我的原因而无法使用...

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

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

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

预先感谢

5 个答案:

答案 0 :(得分:3)

一种选择是使用.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]]));

答案 1 :(得分:3)

使用Array.mapSpread 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);

答案 2 :(得分:3)

enter image description here

基准: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)

答案 3 :(得分:1)

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

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);

答案 4 :(得分:1)

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])));