2012-04-02 2 views
3

나는 내가 계속해서 자신이 데이터베이스에서 데이터를 당기는 때 사이의 선택 발견이 두 가지 데이터 구조가 있습니다데이터 구조에 관한 가장 좋은 방법은 고유 ID의

{ 
    "1": {"location": "seattle", "color": "red"}, 
    "2": {"location": "irvine", "color": "blue"}, 
    "3": {"location": "san diego", "color": "green"} 
} 

{ 
    "listings":[ 
     {"id": "1", "location": "seattle", "color": "red"}, 
     {"id": "2", "location": "irvine", "color": "blue"}, 
     {"id": "3", "location": "san diego", "color": "green"} 
    ] 
} 

각각 장단점을 갖고있는 것 같아요을 ...

오브젝트 구조는 ID가 주어진 값에 빠르게 액세스하는 데 적합합니다. obj['3'].color은 매우 느린 루프 인 for(key in obj) 루프로 루프해야하는 모든 오브젝트를 나열 할 때 문제가 있음을 나타냅니다.

for(var i=0; i<array.length; i++)을 사용하면 배열 구조가 훨씬 빠르게 루프되지만 ID가 지정된 값에 액세스하는 것은 쉬운 일이 아닙니다. 제공된 배열에 대해 ID를 확인하면서 전체 배열을 반복하는 함수를 만들어야합니다.

두 솔루션 중 jsperf입니다.

당신은 어느 것이 더 낫다고 생각합니까? 그 이유는 무엇입니까?

+2

JavaScript 개체와 배열이 있지만 여기에 JSON이 없습니다. 데이터를 JSON으로 클라이언트에 전송하면 괜찮습니다.하지만 일단 데이터가 구문 분석되면 더 이상 JSON을 처리하지 않습니다. –

+0

그것은 똑같습니다. 서버가 JSON으로 구문 분석 된 객체 또는 JSON으로 구문 분석 된 배열을 반환한다고 가정합니다. – alnafie

+0

그렇지 않습니다. JSON은 데이터 교환 형식이며 JavaScript 배열 또는 객체는 JavaScript의 데이터 유형입니다. 비슷한 구문으로 오해하지 마십시오. 목적에 가장 적합한 데이터 구조가 무엇인지 파악하는 것이 문제라면 JSON과 전혀 관련이 없습니다. –

답변

1

항상 대답은 입니다.에 달려 있습니다. 대부분 id으로 무작위로 개체에 액세스 하시겠습니까? 그런 다음 객체를 사용하십시오. 대부분 순서대로 반복합니까? 그런 다음 배열을 사용하십시오.

물론 배열을 반환 한 다음 id 값으로 인덱스를 생성하여 둘 다 할 수 있습니다. 예를 들어,

var arr = /*...wherever you get your second example, the array...*/; 
var index, len, entry; 
arr.index = {}; 
for (index = 0, len = arr.length; index < len; ++index) { 
    entry = arr[index]; 
    arr.index[entry.id] = entry; 
} 

은 (내가 정기적에게 유용한 기술을 찾을 수 있기 때문에이 작업을 수행하는 기능을 가지고있다.) 지금 당신은 무작위로 루프, 또는 그들을 통해 루프 arr.index["some_id"]를 통해 액세스 할 수 있습니다

합니다. 수정시주의해야합니다 (예 : 두 곳에서 삭제 및 추가).

index이라는 실제 배열에 속성을 사용했음을 유의하십시오. 이름은 원하는대로 지정할 수 있으며 자주 index 또는 byId 또는 그 유사 물을 사용합니다. 어떤 사람들은 배열에 인덱스가 아닌 속성을 사용하는 것을 싫어합니다. 배열이 are really just objects anyway이므로 아무 문제가 없습니다. 하지만 당신은 자신의 변수에있는 인덱스를 arr의 동료로 추적 할 수 있습니다.

또한 참고 어레이 오브젝트 대 forfor..in을 이용하여 반복의 속도의 절대 차이가있을 수 있지만,이 반복의 속도에서 임의의 실제 영향되는 확률 매우 낮습니다.

+0

"배열을 반환하고 id 값으로 인덱스를 만드는 방법"에 대해 자세히 설명해 주시겠습니까? – alnafie

+0

@alnafie : 완료. –

관련 문제