Set scheint eine gute Möglichkeit zu sein, Arrays mit garantierten eindeutigen Elementen zu erstellen, bietet jedoch keine gute Möglichkeit, Eigenschaften abzurufen, mit Ausnahme von Generator [Set] .values, die auf unangenehme Weise aufgerufen werden mySet.values.next()
.
Dies wäre in Ordnung gewesen, wenn Sie map
ähnliche Funktionen für Sets aufrufen könnten . Aber das kannst du auch nicht.
Ich habe es versucht Array.from
, aber es scheint nur Array-ähnliche Objekte (NodeList und TypedArrays?) In Array zu konvertieren. Ein weiterer Versuch: Object.keys
funktioniert nicht für Sets, und Set.prototype verfügt nicht über eine ähnliche statische Methode.
Die Frage: Gibt es eine bequeme eingebaute Methode zum Erstellen eines Arrays mit Werten eines bestimmten Satzes? (Die Reihenfolge der Elemente spielt keine Rolle).
Wenn es keine solche Option gibt, gibt es vielleicht einen netten idiomatischen Einzeiler dafür? wie, mit for...of
oder ähnlich?
var array = [v for (v of mySet)];
funktioniert nicht in Chrom 46[...mySet]
.Array.from(mySet);
[...mySet]
beim Kompilieren mit Typescript Probleme auftreten (siehe dieses Problem ). Daher ist die Verwendung wahrscheinlich sicherer,Array.from(mySet)
wenn Sie in naher Zukunft auf Typescript konvertieren möchten.über https://speakerdeck.com/anguscroll/es6-uncensored von Angus Croll
Es stellt sich heraus, wir können
spread
Operator verwenden:Oder verwenden Sie alternativ
Array.from
:quelle
Array.from
und...
Array.from
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…chrome://flags/#enable-javascript-harmony
Denken Sie daran, dass es experimentell ist. Denken Sie im Moment nicht, dass dies eine gute Lösung für die Entwicklung ist.Angenommen, Sie verwenden nur
Set
vorübergehend, um eindeutige Werte in einem Array abzurufen und dann wieder in ein Array zu konvertieren, versuchen Sie Folgendes:Dies hängt von der Verwendung von Unterstrich oder Bindestrich ab .
quelle
Vielleicht zu spät zur Party, aber Sie könnten einfach Folgendes tun:
Dies sollte problemlos in Browsern funktionieren, die ES6 unterstützen, oder wenn Sie eine Unterlegscheibe haben, die die oben genannten Funktionen korrekt ausfüllt.
Bearbeiten : Heute können Sie einfach verwenden, was @ c69 vorschlägt:
quelle
set.entries()
Array von Paaren erhalten. Sie können verwendenset.values()
, um das einfache Array zu erhalten.var array = Array.from(set);
.entries
, noch.values
. Wie @Buffalo oben erwähnt -Array.from(set)
ist genug.Array.from()
funktionierte nicht wie erwartet. Aber jetzt verbreiten undArray.from()
beide funktionieren gut.Verwenden Sie den Spread-Operator, um das gewünschte Ergebnis zu erzielen
quelle
In meinem Fall war die Lösung:
value1 ist gleich value2 => Der Wert, der in der aktuellen Position im Set enthalten ist. Für beide Argumente wird der gleiche Wert übergeben
Arbeitete unter IE11.
quelle
Die Verwendung von Set und die Konvertierung in ein Array ist dem Kopieren eines Arrays sehr ähnlich ...
Sie können also dieselben Methoden zum Kopieren eines Arrays verwenden, was in ES6 sehr einfach ist
Zum Beispiel können Sie verwenden
...
Stellen Sie sich vor, Sie haben dieses Set unten:
Sie können es einfach konvertieren mit:
und das Ergebnis ist:
Ein Array und jetzt können Sie alle Methoden verwenden, die Sie für ein Array verwenden können ...
Andere übliche Methoden:
oder mit Schleifen wie:
quelle
Der folgende Code erstellt eine Menge aus einem Array und verwendet dann den
...
Operator.quelle
Hier ist eine einfache Möglichkeit, nur eindeutige Rohwerte aus dem Array abzurufen. Wenn Sie das Array in Set konvertieren und danach die Konvertierung von Set in Array durchführen. Diese Konvertierung funktioniert nur für Rohwerte, für Objekte im Array ist sie ungültig. Probieren Sie es selbst aus.
quelle
EINFACHSTE ANTWORT
Verteile das Set einfach in []
Ergebnis : [1,5]
quelle