【问题标题】:Create 2D array from 1D array using loop (JavaScript)使用循环(JavaScript)从一维数组创建二维数组
【发布时间】:2016-05-27 23:20:15
【问题描述】:

我有一个数组:[1, 2, 3, 4, 5, 6, 7, 8, 9]

我想用三个一维数组创建一个二维数组。函数变量中的每个 NUM 是每个一维数组的长度。 结果应该是[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

但我得到的只是,,3,,,6,,,9。我做错了什么?

function infiniteLoop(arr, num) {
  var answer = [];
  var count = 0;
  for (let i = 0; i < num.length; i++) {
    for (let j = 0; j < num[i]; j++, count++) {
      answer[i] = [];
      answer[i][j] = arr[count];
    }

  }
  return answer;
}

document.write(infiniteLoop([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3, 3]));

【问题讨论】:

  • 请不要在您的问题中编辑建议,因为这会使您之前版本的问题的答案无效。关于您的编辑,您在错误的位置添加了 answer[i] = []; 部分。再看看我的答案,或者托马斯的(但不要使用new Array())。
  • 抱歉编辑。试图帮助)

标签: javascript arrays loops for-loop


【解决方案1】:

JavaScript 本身没有多维数组,它拥有的是数组数组。

当您尝试使用answer[i][j] 时,answer[i] 的一部分是undefined,因为您还没有将它设置为任何东西——此时answer 只是一个空数组。您需要设置answer[i] = [];answer 的第一个元素设置为空数组,然后您可以使用answer[i][j]

这将适合您现有的循环,如下所示:

for (let i = 0; i < num.length; i++) {
    answer[i] = [];    // <--- add this
    for (let j = 0; j < num[i]; j++, count++) {
      answer[i][j] = arr[count];
    }
}

【讨论】:

    【解决方案2】:

    如果不对其进行测试,我相信您需要在循环下一个数组之前设置 answer[i] = []

    【讨论】:

      【解决方案3】:

      answer[i] 尚未创建。您正在尝试为不存在的事物分配值。你需要像这样创建answer[i]

      answer[i] = new Array(num[i]);
      

      那么,完整的代码:

      function infiniteLoop(arr, num) {
        var answer = [];
        var count = 0;
        for (var i = 0; i < num.length; i++) {
          answer[i] = new Array(num[i]);
          for (var j = 0; j < num[i]; j++, count++) {
            answer[i][j] = arr[count];
          }
        }
        return answer;
      }
      
      document.write(infiniteLoop([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3, 3]));
      

      【讨论】:

        【解决方案4】:

        问题是answer[i] 未定义。解决方案是将以下语句添加到第一个 for 循环的开头:

        answer[i] = [];
        

        这应该将answer[i] 初始化为一个数组,从而允许您为其设置单独的索引。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-27
          • 1970-01-01
          • 1970-01-01
          • 2018-03-31
          • 1970-01-01
          • 2023-01-04
          • 2021-04-28
          相关资源
          最近更新 更多