2012-04-30 2 views
1

개체의 평면 배열을 기반으로 자바 스크립트에서 3 차원 배열 dynamicall을 만들려고합니다. 배열을 반복 한 후에 배열은 비어있는 것처럼 보입니다. 루프 중에 인쇄하면 작동하는 것처럼 보이지만 사라진 것 같아 발신자에게 반환하려고합니다. 도와 줘?자바 스크립트에서 3 차원 배열의 범위?

//init the 3d array ?? 
this.teams = []; 
for(var i = 0; i < sportsStandings.length; i++) { 
    var item = sportsStandings[i]; 
    if(!this.teams[item.league]) 
    this.teams[item.league] = new Array(); 

    if(!this.teams[item.league][item.division]) 
    this.teams[item.league][item.division] = new Array(); 

    this.teams[item.league][item.division][this.teams[item.league][item.division].length] 
    = new Team(item.teamName, item.wins, item.losses); 

    console.log(this.teams); //this prints properly, and i see the 3d array grow 
} 
console.log('second' + this.teams); //this prints nothing 
+3

"리그", "구분"등의 속성이 숫자가 아닌 경우 배열을 실제로 만들지 않고 속성이있는 개체를 만듭니다. JavaScript 배열 비헤이비어는 숫자로 인덱싱 된 속성에만 적용됩니다. "sportsStandings"배열에 정확히 무엇이 있습니까? – Pointy

+0

또한,'console.log'는 여러 브라우저에서 서로 다른 인쇄 포맷 동작을합니다. '+' – adu

+2

대신에 쉼표를 사용하여'sportsStandings [i]'를 변수에 저장하고 그 변수를 참조하면 성능에 도움이되고 읽기 쉽게 만듭니다. – epascarello

답변

0

코드를 약간 정리 했으므로 몇 가지 다른 방법으로 작성했습니다.

this.teams = []; 
var teams = this.teams; 
for(var i = 0; i < sportsStandings.length; i++) { 

    var ss = sportsStandings[i], 
     league = ss.league, 
     division = ss.division, 
     teamName = ss.teamName, 
     wins = ss.wins, 
     losses = ss.losses; 

    if (!teams[league]) { 
     teams[league] = {}; 
     teams[league][division] = []; 
    } else if (!teams[league][division]) { 
     teams[league][division] = []; 
    } 

    var newTeam = new Team(teamName, wins, losses); 
    teams[league][division].push(newTeam); 
} 
+0

와우 ... 고마워. 그 작품. 큰 차이점이 추진력 인 것 같습니다. 왜 그런지 설명해 주시겠습니까? – SPODOG

+1

"리그"에서 만든 속성이 길이에 영향을 미치지 않기 때문에 모든 것이 완료되면 "팀"배열 길이가 0이됩니다. "teams"변수는'[] '대신'{}'으로 초기화되어야합니다. – Pointy

+0

아! 예. 내가 참조. 배열과 속성 사이에는 차이가 있습니다. 이 일을 정리하는 것 같습니다. 뮈스 그라시아 스 .. – SPODOG