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])));
更具体地说,有没有更简单的方法:
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])));