키 조회를 유지하면서 Javascript 객체 / 배열을 정렬하는 방법은 무엇입니까?
원래 ID를 키로 사용하여 일반 Javascript 객체에 저장 한 데이터가 있습니다.
{
"7": {"id":"7","name":"Hello"},
"3": {"id":"3","name":"World"},
...
}
그러나 나는 브라우저가 그것들을 루핑 할 때 특정한 객체 순서를 보장하지 않는다는 것을 발견했다. 그래서 위의 "3"은 "7"보다 먼저 올 것이다. 다음과 같은 배열 형식을 사용하도록 전환했습니다.
[
{"id":"7","name":"Hello"},
{"id":"3","name":"World"},
...
]
이제 올바른 순서로 반복 할 수 있지만 data["3"]
배열을 반복 할 필요없이 빠른 조회를 수행 할 수 없습니다 .
두 접근법을 결합하는 좋은 방법이 있습니까? 개체가 매우 크기 때문에 (수백 개의 요소) 각 형식에 대해 별도의 개체를 사용하지 않는 것이 좋습니다.
이 문제도 겪었습니다. 해결책은 원래 객체에 추가로 정렬 된 키 배열을 유지하는 것입니다.
var objects = {
"7": {"id":"7","name":"Hello"},
"3": {"id":"3","name":"World"},
...
}
var order = [ "3", "7", ... ];
이제 두 번째 요소를 원하는 경우 다음 조회를 수행 할 수 있습니다.
var second_object = objects[order[1]];
ECMA 표준은 객체의 요소 순서에 대해 아무것도 말하지 않습니다. 특히 Chrome 은 숫자 처럼 보일 때 키를 재정렬합니다 . 예:
var example = {
"a": "a",
"b": "b",
"1": "1",
"2": "2"
};
이것을 Chrome에서 인쇄하면 다음과 같은 결과가 나타납니다.
{
1: "1",
2: "2",
"a": "a",
"b": "b"
};
조금 시큼한 데 ..하지만 인생.
Andy가 연결 한 솔루션을 사용할 수 있습니다. 기본적으로이 두 가지를 하나의 개체로 묶습니다.
내가 많이 사용하는 대안은 객체가 통과하는 순서를 지정할 수있는 사용자 지정지도 기능입니다. 일반적으로 데이터를 사용자에게 인쇄 할 때 정렬을 수행하므로 테이블 행을 반복하고 만드는 동안 (예를 들어) 반복기가 정렬 함수가 지정한 순서대로 행을 전달합니다. 좋은 생각이라고 생각 했어요 :)
서명은 다음과 같습니다.
function map(object, callback, sort_function);
사용 예 :
map(object, function (row) {
table.add_row(row.header, row.value);
}, function (key1, key2) {
return object[key1] - object[key2];
});
ReferenceURL : https://stackoverflow.com/questions/5773950/how-to-keep-an-javascript-object-array-ordered-while-also-maintaining-key-lookup
'programing' 카테고리의 다른 글
return 문이 없을 때 javascript 함수는 무엇을 반환합니까? (0) | 2021.01.08 |
---|---|
분리 된 대 결합 가능한 POSIX 스레드 (0) | 2021.01.08 |
두 로컬 저장소 간의 변경 사항을 가져 오는 힘내 (0) | 2021.01.08 |
C에서 유니 코드 문자열의 문자를 계산하는 방법 (0) | 2021.01.08 |
argparse가있는 디렉토리 경로 유형 (0) | 2021.01.08 |