2015-08-26 14 views
7

Muszę wykonać LOT wyszukiwań, parsując xmlStream, jeśli potrzebuję tagu lub nie.Javascript: jakiego wyszukiwania jest szybsze: tablica.indexOf vs obiekt skrótu?

Mogę to zrobić za pomocą metody array.indexOf (mam około ~ 15 elementów w tablicy) lub przy użyciu wyszukiwania obiektu [key].

Drugie rozwiązanie wydaje mi się bardziej skuteczne w teorii, ale w moim kodzie nie wygląda ładnie. Ale jeśli jest naprawdę skuteczniejszy, zostawiłbym go takim, jaki jest.

Np .:

var tags = [ 
    'tag1', 
    'tag2', 
    'tag3', 
    ... 
]; 

var tags2 = { 
    'tag1' : null, 
    'tag2' : null, 
    'tag3' : null, 
} 

tags.indexOf(value) // exists? 
tags2[value] // exists? 
+3

indexOf to O (n), hash to O (1), afaik – elclanrs

+0

Czy próbowałeś? http://jsperf.com/ – Bergi

+3

https://jsperf.com/indexof-vs-hash –

Odpowiedz

5

Cóż, wydajność zależy od wielkości zadanej i swojej strukturze dostępu. Ogólnie rzecz biorąc, indexOf to O (n), a hash to O (1), ponieważ w zestawie znajduje się tylko około 15 elementów i powiedzmy, że każdy dostęp jest całkowicie niezależny i możliwy do przewidzenia, korzyść hash nie jest tak naprawdę .

5

Wyszukiwanie klucza obiektu jest szybsze niż indeks tablicy Array. Możesz to sprawdzić na jsperf.

Wyniki badań:

Array

Indeks 10000 przedmiotów: 26,547 operacji/s
Indeks 100000 przedmiotów: 2,493 operacji/s

Object

klucz Lookup 10000 pozycji: 152,115 operacji/sek.
Klucz wyszukiwania 100000 elementów: 150,450 operacji/sekundę