2011-01-14 4 views
3

크롬 (IE, FF 제외)에서만 흥미로운 문제가있는 것 같습니다. 크롬이 저장된 순서대로 "문자열 숫자"키를 반복 할 수 있습니까?

var myObj = { 
    "59" : "Hello", 
    "52" : "and", 
    "50" : "how", 
    "31" : "are", 
    "65" : "you" 
}; 

는 다음과 같은 순서로 내용을 뱉어 for 루프를 통해이 객체를 통해가는 :

for(var j in myObj) { document.write(myObj[j] +', '); } 

are, how, and, hello, you 

다른 모든 주요 브라우저는 '적절한'순서대로 줄 다음과 같은 목적을 감안할 때. Chrome은 문자열 대신 정수로 키를 처리합니다. 문제는 내가 변경할 수없는 json 데이터 소스를 가지고 있으며 객체에있는 순서대로 항목에 액세스해야한다는 것입니다.

누구든지 Google 크롬에서이 작업을 제안 할 수 있습니까?

+0

T 여기에는 "적절한"명령이 없습니다. –

답변

5

for...in을 통해 개체를 반복 할 때 속성 순서가 보장되지 않습니다. 임의의 순서 (적어도 십자가에, 하나는 반복의 보이는 질서에 의존 할 수없는 이유에 대한 자세한에 대한 delete operator를 볼 수있는 객체의 속성

for...in 루프 반복 : 당신이 할 수있는 것은 아무것도 없습니다 -browser 설정).

그리고 delete 페이지에서

:

ECMAScript를 개체의 반복 순서 구현에 의존, 모든 주요 브라우저가 먼저 나오는 최초의 추가 속성을 기준으로 반복 순서를 지원하는 것으로 나타날 수 있습니다 (에서 만드는 있지만 최소한 프로토 타입에없는 속성의 경우). 그러나 Internet Explorer의 경우 속성에서 삭제를 사용하면 혼동을주는 동작이 발생하여 다른 브라우저에서 객체 리터럴과 같은 간단한 객체를 정렬 된 연관 배열로 사용할 수 없습니다. 탐색기에서 속성 값이 실제로 정의되지 않은 상태로 설정되어있는 경우 나중에 같은 이름의 속성을 다시 추가하면 해당 속성은 이전 위치에서 반복됩니다. 속성을 삭제 한 다음 다시 추가했습니다.

따라서 브라우저 간 환경에서 정렬 된 연관 배열을 시뮬레이션하려면 두 개의 개별 배열 (키와 값에 대해 하나씩)을 사용하거나 단일 배열 배열을 작성해야합니다. 속성 객체 등

관련 문제