2012-12-07 4 views
1

Javascript/AS3의 목록이나 객체에서 항목의 색인을 찾는 가장 빠른 방법은 무엇입니까? 이 두 언어 모두 구문이 비슷하기 때문에이 두 가지를 묻습니다.배열/객체에서 항목을 찾는 가장 빠른 방법

가정 :

myArray = ["one", "two", "three"]; 
myObject = {one:1, two:2, three:3}; 

이 경우 당신이 그것을 원하거나하지 않을 가장 빠르고 어느?

  • 사항 Array.indexOf (x)는
  • 인 myObject [X]! = 다른
  • 무언가 인 myObject에
  • X는 null를?
+0

일반적으로 기본 배열을 사용하며 대괄호 표기법을 사용하여 액세스하는 것이 가장 빠릅니다. 하지만 간단한 Google 검색에서 답변을 찾을 수있을 것이라고 확신합니다 – kennypu

+2

사용 사례는 무엇입니까? – Bergi

답변

3

개체를 사용하면 다시 인덱싱 작업이 많이 걸리므로 액세스 성능이 향상됩니다. Array.indexOf (x)가가는 길 같습니다.

1

개체는 효율적인 해시 테이블을 사용하여 구현되므로 키를 찾는 것이 O (1)가됩니다. "찾을"값이 문자열이고 해당 위치가 고정되어 있으면 매우 빠릅니다. 부울 존재 여부를 확인하는 것은 key in obj으로 수행 할 수 있으며 저장된 인덱스는 obj[key] || -1이됩니다.

더 복잡한 객체 (문자열에 쉽게 직렬화되지 않음)를 검색하는 경우 배열을 사용해야합니다. 은 O (n)으로 검색을 수행합니다. 너무 자주하지 않으면 괜찮습니다. 존재 여부를 확인하는 것은 색인을 얻는 arr.indexOf(item) != -1 일 것입니다.

0

난 네이티브 indexOf 및 필요한 인덱스의 이진 검색에 대한 몇 가지 테스트를 수행했습니다. 다음은 10,000 개의 아이템 배열에 대한 결과입니다.

  • 값 | IndexOf | 이진 검색
  • 1 | 0.003 | 0.013
  • 5000 | 1.546 | 0.016
  • 9990 | 3.105 | 0.015

테스트는 노드 v8 환경에서 수행되지만 기본 indexOf는 필요한 인덱스를 찾기 위해 루프를 사용하고있는 것처럼 보입니다. 다음은 이진 검색에 대한 링크입니다. http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/

관련 문제