918 Stimmen

Wie konvertiert man ein Set in ein Array?

Set scheint eine gute Möglichkeit zu sein, Arrays mit garantiert eindeutigen Elementen zu erstellen, bietet jedoch keine gute Möglichkeit, Eigenschaften abzurufen, außer dem Generator [Set].values, der auf eine umständliche Weise als mySet.values.next() aufgerufen wird.

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

Ich habe Array.from ausprobiert, aber anscheinend werden nur array-ähnliche (NodeList und TypedArrays ?) Objekte in Arrays konvertiert. Ein weiterer Versuch: Object.keys funktioniert nicht für Sets, und Set.prototype hat keine ähnliche statische Methode.

Also die Frage: Gibt es eine bequeme integrierte Methode zur Erstellung eines Arrays mit Werten eines bestimmten Sets ? (Die Reihenfolge der Elemente spielt nicht wirklich eine Rolle).

Wenn keine solche Option vorhanden ist, gibt es vielleicht eine schöne idiomatische Einzeiler-Lösung dafür ? zum Beispiel mit for...of oder ähnlichem ?

1551voto

adeneo Punkte 307329

wenn keine solche Option existiert, gibt es vielleicht eine nette idiomatische Einzeilerlösung dafür ? vielleicht mit for...of oder etwas ähnlichem ?

Es gibt tatsächlich mehrere Möglichkeiten, ein Set in ein Array zu konvertieren:

Hinweis: sicherer für TypeScript.

const array = Array.from(mySet);
  • _Einfach das Set in ein Array spreaden:_

Hinweis: Das Spreaden eines Sets hat Probleme, wenn es mit TypeScript kompiliert wird (Siehe Issue #8856). Es ist sicherer, stattdessen Array.from zu verwenden.

const array = [...mySet];
  • Auf die altmodische Weise, durchlaufen und zu einem neuen Array hinzufügen (Sets haben auch forEach):

    const array = []; mySet.forEach(v => array.push(v));

  • Zuvor wurde die nicht standardmäßige und jetzt veraltete Array-Verständnissyntax verwendet:

    const array = [v for (v of mySet)];

102voto

c69 Punkte 18025

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

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

var myArr = [...mySet];

Oder alternativ Array.from verwenden:

var myArr = Array.from(mySet);

18voto

aaronmgdr Punkte 498

Vorausgesetzt, Sie verwenden Set nur vorübergehend, um eindeutige Werte in einem Array zu erhalten und dann wieder in ein Array umzuwandeln, versuchen Sie dies:

_.uniq([])

Dies setzt voraus, dass Sie underscore oder lo-dash verwenden.

12voto

Roland Punkte 8783

Vielleicht zu spät zur Party, aber du könntest einfach Folgendes tun:

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

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

Bearbeiten: Heutzutage kannst du einfach das verwenden, was @c69 vorschlägt:

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

1voto

Ekram Mallick Punkte 31

Der folgende Code erstellt ein Set aus einem Array und verwendet dann den ... Operator.

var arr=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,];
var set=new Set(arr);
let setarr=[...set];
console.log(setarr);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X