【问题标题】:JS how to concat arrays of arraysJS如何连接数组的数组
【发布时间】:2018-08-14 09:02:57
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 预期结果如上例所示。
  • 应该是 [[0,2,4,6,8], [1,3,5,7,9,11]]
  • 我建议你在这里使用 lodash 或下划线
  • MDN 的第二句话包含对您的奖金问题的回答。 (请注意,分配给item 是不够的,但您必须将结果分配给test0[index]
  • @barbsan 谢谢! :)

标签: javascript arrays concat


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案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);

    【讨论】:

    • 您的方法与CertainPerformance 的回答非常相似。我猜他领先你一分钟。 :-p
    • @Rajesh - 是的。我花了一些额外的时间来获取链接:p 显然,CertainPerformance 更快地理解了这个问题。
    【解决方案4】:

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

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

    【讨论】:

    • 看来你是reduce函数的忠实粉丝。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 2019-01-30
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多