values objects convert array javascript arrays collections syntax ecmascript-harmony

objects - json to array javascript



¿Cómo convertir Set a Array? (6)

Set parece ser una buena forma de crear Arrays con elementos únicos garantizados, pero no expone ninguna buena forma de obtener propiedades, excepto para el generador [Set] .values, que se denomina de forma incómoda a mySet.values.next() .

Esto hubiera estado bien, si pudieras llamar a map y funciones similares en los Sets. Pero tampoco puedes hacer eso.

He intentado Array.from , pero parece estar convirtiendo solo objetos de tipo array (¿NodeList y TypedArrays?) A Array. Otro intento: Object.keys no funciona para Sets, 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 los valores de un conjunto determinado? (El orden del elemento no importa).

Si no existe tal opción, entonces tal vez hay una buena frase idiomática para hacer eso. ¿Como, usar for...of , o similar?


si no existe tal opción, entonces tal vez hay una buena frase idiomática para hacer eso? ¿Como, usar para ... de, o similar?

De hecho, hay varias formas de convertir un Set en una Array :

utilizando Array.from

let array = Array.from(mySet);

Simplemente spreading el Set out en una matriz

let array = [...mySet];

La manera antigua, iterando y empujando a una nueva matriz (los conjuntos tienen forEach )

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

Usando un más sofisticado for...of loop (parece que esto ya no funciona en Chrome)

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



Quizás hasta tarde a la fiesta, pero puedes hacer lo siguiente:

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

Esto debería funcionar sin problemas en los navegadores que tienen soporte para ES6 o si tiene un shim que rellene correctamente la funcionalidad anterior.

Edición : Hoy puedes usar lo que @ c69 sugiere:

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


Suponiendo que solo esté usando Set temporalmente para obtener valores únicos en una matriz y luego volver a convertir en una Matriz, intente usar esto:

_.uniq([])

Esto se basa en el uso de subrayado o lo-dash .


Utilice el operador de propagación para obtener el resultado deseado

var arrayFromSet = [...set];