Set parece ser una buena manera de crear matrices con elementos únicos garantizados, pero no expone ninguna buena manera de obtener propiedades, excepto los valores [Set]. Generador, que se llaman de una manera incómoda mySet.values.next()
.
Esto hubiera estado bien, si pudieras llamar map
y funciones similares en Sets. Pero tampoco puedes hacer eso.
Lo he intentado Array.from
, pero parece estar convirtiendo solo objetos tipo matriz (¿NodeList y TypedArrays?) En Array. Otro intento: Object.keys
no funciona para Sets, y Set.prototype no tiene un método estático similar.
Entonces, la pregunta: ¿hay algún método incorporado conveniente para crear una matriz con valores de un conjunto dado? (El orden del elemento realmente no importa).
Si no existe tal opción, entonces ¿tal vez hay una buena frase idiomática para hacer eso? como, usando for...of
, o similar?
var array = [v for (v of mySet)];
no funciona en Chrome 46[...mySet]
.Array.from(mySet);
[...mySet]
tiene problemas cuando se compila utilizando Typecript (vea este problema ), por lo que probablemente sea más seguro usarloArray.from(mySet)
si tiene la intención de convertir a Typecript en el futuro cercano.a través de https://speakerdeck.com/anguscroll/es6-uncensored por Angus Croll
Resulta que podemos usar el
spread
operador:O, alternativamente, use
Array.from
:fuente
Array.from
y...
Array.from
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…chrome://flags/#enable-javascript-harmony
Recuerde que es experimental. No piense por el momento que es una buena solución para el desarrollo.Suponiendo que solo esté usando
Set
temporalmente para obtener valores únicos en una matriz y luego convirtiendo nuevamente a una matriz, intente usar esto:Esto se basa en el uso de guión bajo o lo-dash .
fuente
Quizás llegar tarde a la fiesta, pero podrías hacer lo siguiente:
Esto debería funcionar sin problemas en los navegadores que tienen soporte para ES6 o si tiene una cuña que rellena correctamente la funcionalidad anterior.
Editar : hoy puede usar lo que @ c69 sugiere:
fuente
set.entries()
obtendrá una matriz de pares. Puede usarset.values()
para obtener la matriz simple.var array = Array.from(set);
.entries
, ni.values
. Como @Buffalo mencionó anteriormente,Array.from(set)
es suficiente.Array.from()
no funcionó como se esperaba. Pero ahora se extendió yArray.from()
ambos funcionan bien.Use el Operador de propagación para obtener el resultado deseado
fuente
En mi caso la solución fue:
valor1 es igual a valor2 => El valor contenido en la posición actual en el Conjunto. Se pasa el mismo valor para ambos argumentos
Trabajó bajo IE11.
fuente
Usar Set y convertirlo en una matriz es muy similar a copiar una matriz ...
Por lo tanto, puede usar los mismos métodos para copiar una matriz que es muy fácil en ES6
Por ejemplo, puedes usar
...
Imagina que tienes este conjunto a continuación:
Simplemente puede convertirlo usando:
y el resultado es:
Una matriz y ahora puede usar todos los métodos que puede usar para una matriz ...
Otras formas comunes de hacerlo:
o usando bucles como:
fuente
El siguiente código crea un conjunto a partir de una matriz y luego, utilizando el
...
operador.fuente
Aquí hay una manera fácil de obtener solo valores brutos únicos de la matriz. Si convierte el conjunto a Conjunto y después de esto, realice la conversión de Conjunto a conjunto. Esta conversión funciona solo para valores sin formato, para objetos en la matriz no es válida. Pruébalo tú mismo.
fuente
RESPUESTA MÁS SENCILLA
solo esparce el set dentro []
Resultado : [1,5]
fuente