使用循环(JavaScript)从1D数组创建2D数组

时间:2016-05-27 23:20:16

标签: javascript arrays loops for-loop

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

我想创建一个包含三个1D数组的2D数组。函数变量中的每个NUM是每个1D数组的长度。 结果应为[[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]));
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

尚未创建

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

所以,完整的代码:

{{1}}

答案 3 :(得分:0)

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

answer[i] = [];

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