2013-01-24 6 views
0

나는 2 차원 배열을 채우려는, 나는 자바 스크립트 코드가 있습니다왜 자바 스크립트에서 2D 배열 채우기가 실패합니까?

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

왜!?이 올바른지 (여기서는 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=[] 구문 대신 arr=new Array()을 사용했지만 동일한 결과가 나타났습니다.

아이디어가 있으십니까? 나는 그것이 사소한 오류가 될 것이라고 거의 확신하지만, 나는 틀린 것을 발견 할 수 없다!.

감사합니다.

+1

당신은 행, 행, 열, 열 및 카운터와 같은 의미있는 변수 이름을 사용하는 경우, 당신은 아마 더 빨리 오류를 발견 것; i, n, j, m 및 z 대신. –

+0

@PatrickMcElhaney 이것은 훌륭한 제안입니다 – Interrobang

답변

7

당신은 모든 루프 반복의 빈 배열을 다시 초기화됩니다

array1[i]=[]; 

당신은 i의 값에 한 번이 일을해야합니다. 가장 안쪽 루프에서 초기화를 이동하십시오. 여기

+0

OH! 나는 그것이 사소한 것이라는 것을 안다, 지금 나는 바보가되었다. 감사! – DiegoDD

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

}