¿Cómo convertir conjunto a matriz?

Resuelto c69 asked hace 10 años • 10 respuestas

Set parece una buena manera de crear matrices con elementos únicos garantizados, pero no expone ninguna buena manera de obtener propiedades, excepto el generador [Set].values, que se llama de una manera incómoda mySet.values.next().

Esto habría estado bien si pudieras llamar mapa funciones similares en Sets. Pero tampoco puedes hacer eso.

Lo intenté Array.from, pero parece estar convirtiendo solo objetos tipo matriz (¿NodeList y TypedArrays?) a Array. Otro intento: Object.keysno funciona para Conjuntos y Set.prototype no tiene un método estático similar.

Entonces, la pregunta: ¿Existe algún método incorporado conveniente para crear una matriz con valores de un conjunto determinado? (El orden de los elementos realmente no importa).

Si no existe tal opción, ¿tal vez haya una buena frase idiomática para hacerlo? ¿Me gusta, uso for...ofo similar?

c69 avatar Nov 19 '13 18:11 c69
Aceptado

Si no existe tal opción, ¿tal vez haya una buena frase idiomática para hacerlo? ¿Me gusta, uso for...ofo similar?

De hecho, hay varias formas de convertir un conjunto en una matriz :

  • Usando Array.from:

Nota: más seguro para TypeScript.

const array = Array.from(mySet);
  • Simplemente spreadingel establecido en una matriz:

Nota: La difusión de un conjunto tiene problemas cuando se compila con TypeScript (consulte el número 8856 ). Es más seguro usar Array.fromarriba.

const array = [...mySet];
  • A la antigua usanza, iterando y empujando a una nueva matriz (los conjuntos tienen forEach):
const array = [];
mySet.forEach(v => array.push(v));
  • Anteriormente, se utilizaba la sintaxis de comprensión de matrices no estándar y ahora obsoleta:
const array = [v for (v of mySet)];
adeneo avatar Nov 19 '2013 11:11 adeneo

vía https://speakerdeck.com/anguscroll/es6-uncensored por Angus Croll

Resulta que podemos usar spreadel operador:

var myArr = [...mySet];

O, alternativamente, utilice Array.from:

var myArr = Array.from(mySet);
c69 avatar Jan 17 '2014 19:01 c69