programing

키 조회를 유지하면서 Javascript 객체 / 배열을 정렬하는 방법은 무엇입니까?

nasanasas 2021. 1. 8. 08:19
반응형

키 조회를 유지하면서 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

반응형