2015-08-26 5 views
7

Ich muss eine LOT von Nachschlagen durchführen, während ich XMLStream analysiere, wenn ich ein Tag brauche oder nicht.Javascript: welche Suche ist schneller: array.indexOf vs Objekt Hash?

Ich kann es mit array.indexOf Methode (ich habe etwa ~ 15 Elemente im Array) oder mit Objekt [key] lookup.

Zweite Lösung scheint in der Theorie für mich effizienter, aber sieht nicht Linie in meinem Code schön. Aber wenn es wirklich effizienter ist, würde ich es so lassen wie es ist.

Z. B .:

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

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

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

indexOf ist O (n), Hash ist O (1), afaik – elclanrs

+0

Haben Sie es versucht? http://jsperf.com/ – Bergi

+3

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

Antwort

5

Nun hängt die Leistung Ihrer Set Größe und Ihre Zugriffsmuster. Im Allgemeinen ist der IndexOf O (n) und Hash ist O (1), da Sie jedoch nur etwa 15 Elemente in der Menge haben und sagen wir, jeder Zugriff ist völlig unabhängig und gleichbedeutend, der Vorteil von Hash ist nicht wirklich da .

5

Die Suche nach Objektschlüsseln ist schneller als Array's indexOf. Sie können es unter jsperf überprüfen.

Testergebnisse:

Array

Index von 10000 Punkte: 26.547 Operationen/s
Index von 100000 Einheiten: 2493 Operationen/s

Objekt

Lookup Schlüssel von 10000 Artikeln: 152,115 Operationen/Sek.
Suchschlüssel von 100000 Elementen: 150,450 Operationen/Sek.

Verwandte Themen