2014-07-07 3 views
0

노드를 사용하여이 파일을 실행할 때 한 값이 정의되지 않은 것으로 반환되고 다른 하나가 목록에 포함되지 않는 이유를 설명 할 수 있습니까?이 JavaScript 배열이 정의되지 않은 이유는 무엇입니까?

  • 0 캠
  • 1 덕
  • 2 갈렙
  • 3 데이비드
  • 4 켈리
  • 5 아파르
  • 0 캠
  • 1 덕
  • 2 정의
  • 3 데이비드

    var queue = {}; 
    
    queue[0] = 'Cam'; 
    queue[1] = 'Doug'; 
    queue[2] = 'Caleb'; 
    queue[3] = 'David'; 
    queue[4] = 'Kelli'; 
    queue[5] = 'Aparna'; 
    
    var sorted_keys = Object.keys(queue).sort(); 
    
    for (var key in sorted_keys) { 
    console.log(key + " " + queue[key]); 
    } 
    
    for (var key in sorted_keys) { 
    if (key == 2 || key == 4) { // trying to mock disable accounts and remove 
        delete queue[key]; 
    } 
    } 
    
    sorted_keys = Object.keys(queue).sort(); 
    
    for (var key in sorted_keys) { 
        console.log(key + " " + queue[key]); 
    } 
    
+1

는'Array.prototype.sort'가의 장소입니다. – Blender

+3

JavaScript 배열을 반복 할 때는'for ... in'을 사용하지 말아야합니다. – Pointy

+0

주문한 컬렉션에 개체 대신 배열을 사용하거나 바퀴를 다시 발명하십시오. – dandavis

답변

1

귀하의 주요 문제는 당신이 키의 배열입니다 sorted_keys을 반복하고하고 queue 객체로 인덱스 배열에서 인덱스 값을 사용하려는 것입니다, 그러나 그것은 배열 인덱스가 아니라 queue 객체의 키입니다. 어레이의 인덱스가 아니라 배열에서 실제 값을 가져와야합니다. queue 오브젝트의 키가있는 곳이기 때문입니다.

배열을 반복 처리하지 않아야합니다 (실제로는이 문제를 일으키는 것이 아닙니다). for/in으로 배열을 반복해야합니다. 당신이 당신의 마지막 반복을 변경하는 경우

, 당신은 당신이 기대하는 것을 볼 수 있습니다 :

for (i = 0; i < sorted_keys.length; i++) { 
    key = sorted_keys[i]; 
    console.log(key + " " + queue[key]); 
} 

근무 데모 : http://jsfiddle.net/jfriend00/5dPsR/

관련 문제