有没有一种方法可以将另一个数组的元素推到二维数组中的特定数组?

时间:2019-07-25 21:12:11

标签: javascript arrays multidimensional-array

基本上,我需要这样做:将2D数组中每个数组的x元素放入另一个数组的x元素中。

我没有收到任何语法错误,但是我的程序停止运行(但是该行两边的console.logs,只有最上面的一个被记录)。这是我的代码:

for (var i = 0; i < myArray.length; i++) {
          for (var j = 0; j < myArray[i].length; j++) {
            console.log("Hi")
            finishedarray[i].push(myArray[i][j])
            console.log("Hi x2")

          }
        }

我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

FlatMap

您要执行的操作称为平面映射。建立flatMap功能的方法是将reduce与散布运算符或Array.concat结合使用,如下所示:

减少+传播/影响

ES2015
const myArray = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

const finishedArray = myArray
   .reduce((combinedArr, currentArr) => ([...combinedArr, ...currentArr]), []);

console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]
ES5
var myArray = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

var finishedArray = myArray
   .reduce(function (combinedArr, currentArr) {
      return combinedArr.concat(currentArr);
   }, []);

console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Array.flat

var myArray = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

var finishedArray = myArray.flat();
console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案的补丁

您的代码也应该可以解决一些错误。代码中的问题是,您尝试将条目推入finishedarray[i]-但是您有一个空数组,并且访问位置为i,该位置返回undefined。只需直接推送到数组即可:

for-loop

for (var i = 0; i < myArray.length; i++) {
   for (var j = 0; j < myArray[i].length; j++) {
      finishedarray.push(myArray[i][j]);  // removed the "[i]" part in front of ".push"
   }
}

for ... of循环

for (var arr of myArray) {
   for (var entry of arr) {
      finishedarray.push(entry);
   } 
}

编辑:添加了Array.flat。感谢您对此的评论!