new Set(['b', 'a', 'c']).sort()
wirft TypeError: set.sort is not a function
. Wie kann ich eine sortieren Set
, um eine bestimmte Iterationsreihenfolge sicherzustellen?
javascript
arrays
sorting
set
ecmascript-6
ericsoco
quelle
quelle
Set
angeboten werden, und trotzdem die Elemente sortieren zu können. Java bietetSortedSet
s an , ich kann nur davon ausgehen, dass dies der Fall ist, weil jemand einen gültigen Anwendungsfall angeboten hat ... ES6 sollte nicht Java sein, aber Sortiersätze scheinen nützlich zu sein.sort()
einSortedSet
entweder. Es wird eine Baumstruktur verwendet, die das Durchlaufen in der Reihenfolge ermöglicht. Sie können diese Reihenfolge jedoch nicht wie bei einer ändernArrayList
. Wenn Sie die Reihenfolge ändern möchten, verwenden Sie Listen.Set
die Ordnung bleibt erhaltennew Set(['b', 'a', 'c'].sort())
Antworten:
Eine Menge ist keine geordnete abstrakte Datenstruktur.
A hat
Set
jedoch immer die gleiche Iterationsreihenfolge - Einfügereihenfolge für Elemente [1]. Wenn Sie es also iterieren (durch eine iterierende Methode, durch AufrufenSymbol.iterator
oder durch eine for .. of-Schleife), können Sie dies immer erwarten.Sie können den Satz jederzeit in ein Array konvertieren und sortieren.
Array.from(new Set(["b","a","c"])).sort(); [...(new Set(["b","a","c"]))].sort(); // with spread.
[1]
forEach
und CreateSetIteratorquelle
Set
zuArray
. Und zurück Scheint ziemlich ineffizient.“OrderedSet
aber eine ähnliche Datenstruktur existiert in mehreren anderen Sprachen - normalerweise implementiert durch einen Baum. Sie können eine Userland-Sammlungsbibliothek verwenden, nämlich - die beliebte ImmutableJS bietet eineOrderedSet
. In der Tat wird dies in vielen Fällen wahrscheinlich effizienter sein. Wenn Sie also einen Satz mit über 100.000 Elementen haben, würde ich definitiv in Betracht ziehen, stattdessen eine geordnete Satzimplementierung zu verwenden.(x, y) => x - y
. Andernfalls werden Ihre Nummern lexikografisch sortiert.OrderedSet
verwendet die Einsetzfolge als Iterationsreihenfolge; Das heißt, es macht dasselbe, wie es Ihrer Antwort zufolge der StandardSet
tut.OrderedSet
Objekt macht Dich zu sortieren lassen () seinen Inhalt, die a) die NormSet
nicht , und b) ist die Funktionalität OP wollte.