【问题标题】:Is there a way to push an element of another array to a specific array that's in a 2d array?有没有办法将另一个数组的元素推送到二维数组中的特定数组?
【发布时间】:2019-12-04 05:12:11
【问题描述】:

基本上我需要这样做:将每个数组的 x 元素放入 2D 数组中,并将其推送到不同数组的 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")

          }
        }

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

【问题讨论】:

  • 你也有数组吗?
  • 很高兴看到输入样本和预期输出。这是明确您的需求的好方法。

标签: javascript arrays multidimensional-array


【解决方案1】:

平面地图

您想要做的就是所谓的平面映射。构建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。直接push到数组即可:

for-循环

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。感谢您对此的评论!

【讨论】:

  • 您如何确定 OP 想要展平阵列?查看代码,似乎想要将所有元素复制到另一个二维数组中。反正这里没有映射,Array.flat()也存在。
  • 哦,确实,不知道我怎么会错过。我会相应地更新答案。在我看来,代码就像他想把它弄平一样。
猜你喜欢
  • 2022-12-07
  • 2021-11-03
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多