2012-12-12 4 views
1

각 첫 번째 요소에 인덱스 번호가있는 2 차원 배열을 만들려고합니다.for 루프 및 인덱스 배열이 작동하지 않습니다.

$('#create_indexed_array').click(function() { 
    var new_array = [[9,9],[9,9],[9,9],[9,9],[9,9]]; 
    for (var i = 0; i < 5; i++) { 
     new_array[i][0] = i; 
    } 

    alert(JSON.stringify(new_array)); 

}); 

을하지만이되지 작동합니다 :

$('#create_indexed_array').click(function() { 
    var new_array = new Array(new Array()); 
    for (var i = 0; i < 2; i++) { 
     new_array[0][i] = ""; // create cols 
    } 
    for (var i = 1; i < 5; i++) { 
     new_array[i] = new_array[0]; // create rows 
    } 
    for (var i = 0; i < 5; i++) { 
     new_array[i][0] = i; // set index 
    } 
    alert(JSON.stringify(new_array)); 

}); 

편집 : 내 최종 작업 버전을

이 작품 (내 앞의 질문이 시점>에 나를 데리고) (지금까지) :

var myArray = []; 
var rows = 5; 
var cols = 2; 

for (var i = 0; i < rows; i++) { 
    myArray [i] = []; 
    for (var j = 0; j < cols; j++) { 
     if (j==0) myArray [i][j] = i; 
     else myArray [i][j] = ''; 
    } 
} 

alert(JSON.stringify(myArray)); 

대부분 jfriend에 의해 (R))가 함께 시작 부분에 2 차원 배열을 선언 할 수없는 이유

여전히

모른다 :에서 myArray = [[]]

+1

이 코드는 작동하지 않습니다 ....하지 마! 사용자 이름은 사샤 ... 우연의 일치인가요? – jbabey

+0

두 번째 두 개의 'var'는 필요하지 않습니다. 선언문은 함수의 최상위로 올라갈 것입니다. –

+0

baron, jbabey라고 부르세요. 예, 중복되었지만 첫 번째 (삭제 된 원래 질문)를 편집 한 후 손실 된 것처럼 보입니다. duno --- 예, 두 번째 var는 필요하지 않지만 문제는 아닙니까? – sasha

답변

1

현재의 패턴에 따라, 그것은 다음과 같이 작동합니다 :

$('#create_indexed_array').click(function() { 
    var myArray = [[]]; 
    for (var i = 0; i < 2; i++) { 
     myArray[0][i] = ""; // create cols 
    } 
    for (i = 1; i < 5; i++) { 
     // create copy of first row in each other row 
     myArray[i] = myArray[0].slice(0); 
    } 
    for (i = 0; i < 5; i++) { 
     myArray[i][0] = i; // set index 
    } 
    alert(JSON.stringify(myArray)); 
});​ 

작동 데모를 : 당신이 기억해야 http://jsfiddle.net/jfriend00/vJDPp/

한 가지 배열을 할당하는 해당 배열에 대한 참조가 아닌 할당한다는 것입니다 배열의 각 요소를 다르게하려면 첫 번째 행의 사본을 물리적으로 만들어 후속 행에 넣어야합니다. 나 또한 new_array의 이름을 변경하는 것이 좋습니다. 왜냐하면 그 코드는 함수 이름과 비슷하게 들리므로 코드를 잘 모르는 사람에게 읽기 쉽도록 코드를 작성합니다. 당신은 당신의 첫 번째 코드 예제처럼 모든 구 년대에 2 차원 배열을 초기화하는 경우


,이 훨씬 간단 할 것이다 :

$('#create_indexed_array').click(function() { 
    var myArray = []; 
    for (var i = 0; i < 5; i++) { 
     myArray[i] = []; 
     for (var j = 0; j < 2; j++) { 
      myArray[i][j] = 9; 
     } 
    } 
    alert(JSON.stringify(myArray)); 
}); 

또는 함수 버전 :

function create2DArray(lenX, lenY, initVal) { 
    var myArray = []; 
    for (var i = 0; i < lenX; i++) { 
     myArray[i] = []; 
     for (var j = 0; j < lenY; j++) { 
      myArray[i][j] = initVal; 
     } 
    } 
    return(myArray); 
} 
+0

맞습니다. 참조가 문제였습니다. 모두에게 고마워! – sasha

+0

@sasha - 훨씬 간단한 2D 배열 초기화 예제를 추가했습니다. – jfriend00

0

왜 돈 ' 임베디드 for 루프에서 사용합니까?

For(var i = 0; i < 2; i++) { 
    For(var j = 0; j < 5; j++) { 
      new_array[i][j] = i; //set index 
    } 
} 

그런 식으로 색인을 한꺼번에 설정합니다. 먼저 신고해야합니다.

이전 문제는 두 개의 분리 된 배열, 항목의 배열 및 해당 배열의 배열처럼 취급한다는 것이 었습니다. 2D 배열은 2 차원의 배열입니다.

+0

'For '대신'for'를 사용합니다. –

+0

OP의 두 번째 코드 블록과 동일한 결과를 생성하지 않습니다 하려고하는 것입니다. – jfriend00

+0

나는 더 이상 대소 문자를 구분하는 데 익숙하지 않다. 내 생각에. 그리고 OP가 뭘하려고했는지 완전히 놓친 것 같아요? – Loogawa

관련 문제