我有一个数组:[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;
答案 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]
初始化为数组,从而允许您为其设置单独的索引。