在 JavaScript 中将嵌套数组拆分为多个数组

时间:2021-03-04 09:40:32

标签: javascript arrays typescript

我有一个如下所示的数组。

[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]

我想要这样的数组。

[[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]

这是我的方法。

chunk(result, size) {
    var finalResluts = result;    
    for(let j=0; j<result.length; j++){      
      var  k = 0, n = result[j].length;
        while (k < n) {
        finalResluts[j].push(result[j].slice(k, k += size));
        }
    }    
    return finalResluts;
}

console.log(chunk([[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]], 3));

结果显示如下。我在这里做错了什么?

0: Array(8)
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
6: (3) [1, 2, 3]
7: (3) [4, 5, 6]

这里的参考是 stackblitz https://stackblitz.com/edit/typescript-rmzpby

1 个答案:

答案 0 :(得分:1)

问题在于您将 finalResults 初始化为输入数组 results,因此结果被推送到原始 [1, 2, 3, 4, 5, 6] 数组中。
您需要做的是为输入的每个子数组创建一个空数组,以便稍后填充。使用 map 函数最容易实现:

function chunk(result, size) {
    //for each subArray - create empty array
    var finalResluts = result.map(subArray => []);    
    for(let j=0; j<result.length; j++){      
      var  k = 0, n = result[j].length;
        while (k < n) {
        finalResluts[j].push(result[j].slice(k, k += size));
        }
    }    
    return finalResluts;
}

console.log(chunk([[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]], 3));
相关问题