2014-03-19 2 views
1

아무도 왜 이것이 작동하지 않는지 말할 수 있습니까? 내가 어떤 예제 문서 및 구매 무엇을 말할 수에서 나는 그것을해야 찾을 수 있습니다,하지만 난 그것을자바 스크립트 2 차원 배열

Uncaught TypeError: Cannot set property '0' of undefined 

감사를 실행할 때 나는

var colorArray = []; 
    colorArray[0] = []; 
    colorArray[0][0] = '2F76EE'; 
    colorArray[0][1] = '2F76EE'; 
    colorArray[0][2] = '5fff74'; 
    colorArray[0][3] = '5e6cff'; 
    colorArray[0][4] = 'a6ff1d'; 
    colorArray[1][0] = '2F76EE'; //error is happening here 
    colorArray[1][1] = '2F76EE'; 
    colorArray[1][2] = '5fff74'; 
    colorArray[1][3] = '5e6cff'; 
    colorArray[1][4] = 'a6ff1d'; 

아래의 오류를 오류가 계속!

+0

http : // stackoverflow를 참조하십시오. .com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript – Phrogz

+0

JavaScript에 2 차원 배열이 없습니다. 그것은 배열을 가지고 있으며, 배열을 중첩 할 수 있습니다. 그러나 메인 어레이의 첫 번째 슬롯에 서브 어레이를 놓았다고해서 두 번째 슬롯에 자동으로 하나의 슬롯을 얻는 것은 아닙니다. – Phrogz

답변

4

colorArray[1][0]라고 말하면 JavaScript는 colorArray[1]에 액세스하며 아직 정의되지 않았으므로 undefined으로 평가됩니다. 그래서, 당신은 undefined[0]을하려고합니다. 그것이 실패하는 이유입니다.

이 문제를 해결하려면,

  1. 당신은 당신이 정적 일을하고 있기 때문에 그 요소

    colorArray[1][0] = '2F76EE'; 
    colorArray[1][1] = '2F76EE'; 
    ... 
    
  2. 로 변경하기 전에이

    colorArray[1] = []; 
    

    같은 요소 하나를 초기화해야 초기화, 할 수 있습니다

    var colorArray = []; 
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]); 
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]); 
    
  3. 그렇지 않으면,이

    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ], 
            [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]]; 
    
  4. 처럼, 바로 초기화 할 수 있습니다 당신은이

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var colorArray = []; 
    colorArray.push(element1, element2); 
    

    주처럼 뭔가를 할 수 있습니다 당신은 궁금 할 것이다, 왜 간단히 할 수 없다

    colorArray.push(element1, element1); 
    

    두 어레이가 동일하기 때문에 물론 작동 할 것입니다. 하지만 문제가 있습니다. 배열 중 하나를 변경하면 다른 배열에도 영향을 미칩니다.. 예 :

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var colorArray = []; 
    colorArray.push(element1, element1); 
    colorArray[0].push("abcdef"); 
    console.log(colorArray); 
    // [ [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ], 
    // [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ] ] 
    

    예기치 않은 결과입니다. 그러나 JavaScript에서는 모든 변수 이름이 객체에 대한 참조 일뿐입니다. 따라서 colorArray.push(element1, element1);을 수행 할 때 동일한 참조를 두 번 추가하는 것입니다. 따라서 두 요소가 동일한 객체를 가리키고 있습니다. 그래서 하나를 돌연변이시키는 것은 다른 것에 영향을 줄 것입니다.

+0

좋은 답변입니다! 고맙습니다! – Jason

1

당신은 당신의 문제를 방지 또한

colorArray[1] = [];

0

당신이 가진 것보다 훨씬 간단하고있을 필요가 :

var colorArray = 
    [['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d'], 
    ['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d']]; 

(당신이 쓴 이유에 대한 다른 답변을 참조하십시오 깨졌습니다.)

관련 문제