Javascript-Set vs. Array-Leistung
Es vielleicht, weil die Sets sind relativ neu in Javascript, aber ich habe nicht in der Lage zu finden einen Artikel, auf StackO oder irgendwo sonst, dass die Gespräche über den Unterschied in der Leistung zwischen den beiden in Javascript. Also, was ist der Unterschied, in Bezug auf die Leistung zwischen den beiden? Speziell, wenn es darum geht, entfernen, hinzufügen und überarbeiten.
Kommentar zu dem Problem
Sie können nicht verwenden Sie Synonym. So macht es sehr wenig Sinn, Sie zu vergleichen.
Sie reden über den Vergleich zwischen
Set
und []
oder {}
? Hinzufügen und überarbeiten, machen Sie nicht viel Unterschied, entfernen und - vor allem - lookup einen Unterschied machen.
mögliche Duplikate von Javascript-ES6 computational - /Zeit-Komplexität von Kollektionen
@zerkms—streng, Array ' s sind nicht bestellt, aber Ihre Verwendung von einem index ermöglicht Ihnen so behandelt werden, als wenn Sie es sind. 😉 Die Reihenfolge der Werte in einer Menge gehalten werden, in der insertion order.
InformationsquelleAutor der Frage neoflash | 2016-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Teile ich einige test der performance. Versuchen Sie, öffnen Sie Ihre Konsole und copypaste den code unten.
Erstellen eines Arrays (125000)
1. Suchen eines Index
Wir verglichen das hat Methode-Set mit Arrays indexOf:
2. Hinzufügen eines neuen Elements
Vergleichen wir das hinzufügen und push-Methoden der Satz-und Array-Objekte bzw.:
3. Löschen eines Elements
Beim löschen von Elementen, müssen wir im Hinterkopf behalten, Array und Set nicht starten unter gleichen Bedingungen. Array verfügt nicht über eine native Methode, also eine externe Funktion notwendig ist.
Lesen Sie den vollständigen Artikel hier
InformationsquelleAutor der Antwort Daniel Eduardo Delgado Diaz
Meine Beobachtung ist, dass ein Satz immer besser mit zwei Fallstricke für große arrays in den Sinn :
a) Die Erstellung des Sets von Arrays muss getan werden, in einem
for
Schleife mit einem precached-Länge.langsam (z.B. 18ms)
new Set(largeArray)
schnell (z.B. 6ms)
const SET = new Set();
const L = largeArray.length;
for(var i = 0; i<L; i++) { SET.add(largeArray[i]) }
b) Iteration getan werden könnte, in der gleichen Weise, weil es auch schneller ist als ein
for of
loop ...Sehen https://jsfiddle.net/0j2gkae7/5/
für einen real-life Vergleich
difference()
,intersection()
,union()
unduniq()
( + Ihre iteratee Gefährten etc.) mit 40.000 ElementenInformationsquelleAutor der Antwort sebilasse
Ich habe vor kurzem lief dieser test gefunden und das Set viel besser als ein Array mit 1000 Elementen (etwa 10x die Vorgänge, die passieren könnte, in der gleichen Zeitrahmen). Und je nach browser entweder schlagen oder verloren zu widersprechen.hasOwnProperty in einer like-for-like-test.
Set und Objekt "hat" Methode durchführen, was zu sein scheint amortisiert O(1), aber je nach browser-Implementierung einen einzigen Vorgang könnte länger dauern oder schneller.
https://jsperf.com/set-has-vs-object-hasownproperty-vs-array-includes/1
In Fall, dass Sie wollen, führen Sie Ihre eigenen tests mit verschiedenen Browsern/Umgebungen.
InformationsquelleAutor der Antwort Zargold
Diese drei Operationen auf 10K items gab mir:
InformationsquelleAutor der Antwort jessh