it-swarm-eu.dev

Wie konvertiere ich Set in Array?

Set scheint eine nette Art zu sein, Arrays mit garantierten einzigartigen Elementen zu erstellen, bietet aber keine gute Möglichkeit, Eigenschaften zu erhalten, mit Ausnahme von generator [Set] .values, das auf unbequeme Weise von mySet.values.next() aufgerufen wird.

Dies wäre in Ordnung gewesen, wenn Sie map und ähnliche Funktionen in Sets aufrufen könnten. Aber das kannst du auch nicht.

Ich habe Array.from ausprobiert, scheint aber 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.

Also die Frage: Gibt es eine praktische eingebaute Methode zum Erstellen eines Arrays mit Werten eines gegebenen Sets? (Reihenfolge der Elemente spielt keine Rolle).

wenn keine solche Option vorhanden ist, gibt es dafür vielleicht einen Nice-Einzeiler von Nice? wie for...of oder ähnliches?

355
c69

wenn keine solche Option vorhanden ist, gibt es möglicherweise eine Nice-Idiomatik Einliner dafür? wie für ... oder ähnlich?

In der Tat gibt es mehrere Möglichkeiten, ein Set in ein Array zu konvertieren: 

using Array.from

let array = Array.from(mySet);

Einfach spreading Die Anordnung in einem Array

let array = [...mySet];

Die alte Art und Weise, iteriert und in ein neues Array verschoben (Sets haben forEach)

let array = [];
mySet.forEach(v => array.Push(v));

Bisher mit der nicht standardmäßigen und jetzt veralteten Syntax für das Arrayverständnis:

let array = [v for (v of mySet)];
641
adeneo

via https://speakerdeck.com/anguscroll/es6-uncensored von Angus Croll

Es stellt sich heraus, dass wir den Operator spread verwenden können:

var myArr = [...mySet];

Oder verwenden Sie alternativ Array.from :

var myArr = Array.from(mySet);
58
c69

Angenommen, Sie verwenden nur Set, um eindeutige Werte in einem Array zu erhalten, und konvertieren sie anschließend wieder in ein Array.

_.uniq([])

Dies setzt die Verwendung von Unterstrich oder lo-dash voraus.

10
fremn

Verwenden Sie Spread Operator, um das gewünschte Ergebnis zu erhalten

var arrayFromSet = [...set];
4
Vignesh Murugan

Vielleicht zu spät zur Party, aber Sie könnten Folgendes tun:

const set = new Set(['a', 'b']);
const values = set.values();
const array = Array.from(values);

Dies sollte ohne Probleme in Browsern funktionieren, die ES6 unterstützen, oder wenn Sie ein Shim haben, das die obige Funktionalität korrekt erfüllt.

Edit : Heute kannst du einfach das benutzen, was @ c69 vorschlägt:

const set = new Set(['a', 'b']);
const array = [...set]; // or Array.from(set)
2
Roland

In meinem Fall war die Lösung:

var testSet = new Set();
var testArray = [];

testSet.add("1");
testSet.add("2");
testSet.add("2"); // duplicate item
testSet.add("3");

var someFunction = function (value1, value2, setItself) {
    testArray.Push(value1);
};

testSet.forEach(someFunction);

console.log("testArray: " + testArray);

value1 entspricht value2 => Der Wert, der an der aktuellen Position im Set enthalten ist. Für beide Argumente wird derselbe Wert übergeben

Arbeitete unter IE11.

0
d0wn

Die Verwendung von Set und das Konvertieren in ein Array ist dem Kopieren eines Arrays sehr ähnlich ...

Sie können also dieselben Methoden verwenden, um ein Array zu kopieren. Dies ist in ES6 sehr einfach.

Beispielsweise können Sie ... verwenden.

Stellen Sie sich vor, Sie haben dieses Set unten:

const a = new Set(["Alireza", "Dezfoolian", "is", "a", "developer"]);

Sie können es einfach konvertieren mit:

const b = [...a];

und das Ergebnis ist: 

["Alireza", "Dezfoolian", "is", "a", "developer"]

Ein Array und jetzt können Sie alle Methoden verwenden, die Sie für ein Array verwenden können ...

Andere gängige Wege:

const b = Array.from(a);

oder mit Schleifen wie:

const b = [];
a.forEach(v => b.Push(v));
0
Alireza