2010-12-30 5 views
2

는 지금은 다음과 같은 자바 스크립트 사전을자바 스크립트 사전 성능 문제

var a = {}; 
a['SVG343'] = 1942; 
a['UAL534'] = 2153; 

오른쪽에 그 숫자를 표현한다 시간을 가지고 있고, 키는 고유 ID입니다. 고유 한 ID를 키로 만들고 싶었습니다. 내 문제는 해당 ID를 찾을 수있는 시간이 주어집니다. 내가 올바른 시간을 찾아서 현재 키를 사용하여 ID를 얻을 때까지 어떻게하면 사전에있는 각 항목을 살펴 보았습니까?

그러나 성능에 대해 걱정하고 있습니다. 제 질문은 사전 (O (n))의 각 항목을 다른 방법보다 상당히 느리게 처리합니까?

당신은 배에서 인덱스를 만들 수
+2

를 사용하는 것이 바람직 할 것이다 VAR는이 {} =; '당신이 여기 – sjngm

+0

@sjngm를 배열을 사용하지 않는 한, 덕분에 고정 – Albinoswordfish

+1

또한 배 독특한? 그렇지 않은 경우 더 많은 시간 가치가있는 경우 어떤 ID를 선택합니까? –

답변

4

:

var indexByTimes = {}; 
for (var prop in a) { 
    if (a.hasOwnProperty(prop)) { 
     indexByTimes[a[prop]] = prop; 
    } 
} 

를 여러 시간 값의 경우, ID에 대해 배열을 사용 : 그럼 당신은 시간에 해당하는 모든 ID에 액세스 할 수 있습니다

for (var prop in a) { 
    if (a.hasOwnProperty(prop)) { 
     if (indexByTimes.hasOwnProperty(a[prop])) { 
      indexByTimes[a[prop]].push(prop); 
     } else { 
      indexByTimes[a[prop]] = [prop]; 
     } 
    } 
} 

O (1)에서 indexByTimes['1942']으로 1942.

+0

감사합니다.! 'indexByTimes ['1942 ']'대신'indexByTimes [1942]'를 의미합니까? – Albinoswordfish

+0

@Albinoswordfish : 아니, 실제로는'indexByTimes [ '1942']'를 의미했습니다. 그러나 둘 다 작동해야합니다 ([속성 이름은 내부적으로 문자열로 변환됩니다] (http://bclary.com/2004/11/07/#a-11.2.1)). – Gumbo

0

사전의 모든 키 반복은 O(n)입니다. 따라서 을 반복해도 O(n)이됩니다. 그러나 모든 키를 반복 한 다음 값 (예 : for(var key in a) { x += a[key]; })을 찾는 것은 O(n*log(n)입니다. 그래서 첫 번째 줄은`해야 하나 a.items() 불구하고 반복하거나 목록