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)];
En mi caso la solución fue:
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 es igual a value2 => El valor contenido en la posición actual en el conjunto. Se pasa el mismo valor para ambos argumentos
Trabajó bajo IE11.
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)
Utilice el operador de propagación para obtener el resultado deseado
var arrayFromSet = [...set];
a través de https://speakerdeck.com/anguscroll/es6-uncensored by Angus Croll
Resulta que podemos usar el operador de spread
:
var myArr = [...mySet];
O, alternativamente, utilice Array.from
.
var myArr = Array.from(mySet);