我想填写一个二维数组,我在javascript中有这个代码:
n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
for(j=0;j<m;j++){
array1[i]=[];
array1[i][j] = z;
console.log(i+","+j+"="+z); //debug
z++;
}
}
console.log(array1);
但不是得到这个预期的结果;
[[0, 1, 2], [3, 4, 5]]
我明白了:
[[undefined, undefined, 2], [undefined, undefined, 5]]
为什么!?我不明白为什么我为每个“内部”数组中的所有项目获取 undefined ,除了最后一个正确的(这里是2和5)。
我做了一个调试步骤,记录每个i,j
对和指定的z
值,每次(i,j=z)
我都会得到正确的配对值:
0,0=0
0,1=1
0,2=2
1,0=3
1,1=4
1,2=5
所以,我认为我每次都使用arr[i][j]=z
正确地填充数组,那么为什么这些情况会得到未定义的?
在这两种情况下,我也尝试使用arr=new Array()
而不是arr=[]
语法,但结果相同。
有什么想法吗?我几乎肯定这将是一个微不足道的错误,但我找不到有什么问题!。
感谢。
答案 0 :(得分:7)
您在每次循环迭代中重新初始化空数组:
array1[i]=[];
当你应该只为i
的每个值做一次。将初始化移出最内层循环。
答案 1 :(得分:0)
这是应该如何
n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
array1[i]=[];
for(j=0;j<m;j++){
array1[i].push(z); // Here is my change
console.log(i+","+j+"="+z); //debug
z++;
}
}