Set semble être un bon moyen de créer des tableaux contenant des éléments uniques garantis, mais il n’expose aucun bon moyen d’obtenir des propriétés, sauf pour le générateur [Set] .values, appelé de manière maladroite avec mySet.values.next()
.
Cela aurait été correct si vous pouviez appeler map
et des fonctions similaires sur les ensembles. Mais vous ne pouvez pas faire cela aussi.
J'ai essayé Array.from
, mais semble ne convertir que des objets de type tableau (NodeList et TypedArrays?) En tableau. Une autre tentative: Object.keys
ne fonctionne pas pour les ensembles et Set.prototype n'a pas de méthode statique similaire.
Donc, la question: Existe-t-il une méthode intégrée pratique pour créer un tableau avec les valeurs d’un ensemble donné? (L'ordre des éléments n'a pas vraiment d'importance).
si une telle option n'existe pas, alors il existe peut-être une ligne idiomatique Nice pour le faire? comme, en utilisant for...of
, ou similaire?
si aucune option de ce type n'existe, alors il existe peut-être un idiomatique de Nice une seule ligne pour le faire? comme, en utilisant pour ... ou similaire?
En effet, il existe plusieurs façons de convertir un Set en un Array :
using Array.from
let array = Array.from(mySet);
Simply spreading
the Exposer dans un tableau
let array = [...mySet];
À l'ancienne, itération et insertion dans un nouveau tableau (les ensembles ont forEach
)
let array = [];
mySet.forEach(v => array.Push(v));
Auparavant, en utilisant la syntaxe de compréhension de tableau non standard et désormais déconseillée:
let array = [v for (v of mySet)];
via https://speakerdeck.com/anguscroll/es6-uncensored de Angus Croll
En fin de compte, nous pouvons utiliser l'opérateur spread
:
var myArr = [...mySet];
Ou, alternativement, utilisez Array.from
:
var myArr = Array.from(mySet);
En supposant que vous n'utilisiez que Set
temporairement pour obtenir des valeurs uniques dans un tableau, puis reconvertissez-les en tableau, essayez ceci:
_.uniq([])
Cela repose sur l’utilisation de underscore ou lo-dash .
Utilisez spread operator pour obtenir le résultat souhaité.
var arrayFromSet = [...set];
Peut-être trop tard pour la fête, mais vous pouvez simplement faire ce qui suit:
const set = new Set(['a', 'b']);
const values = set.values();
const array = Array.from(values);
Cela devrait fonctionner sans problème dans les navigateurs prenant en charge ES6 ou si vous avez une cale qui remplit correctement les fonctions ci-dessus.
Edit : Aujourd'hui, vous pouvez simplement utiliser ce que @ c69 suggère:
const set = new Set(['a', 'b']);
const array = [...set]; // or Array.from(set)
Dans mon cas, la solution était:
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);
A travaillé sous IE11.
Utiliser Set et le convertir en tableau est très similaire à la copie d’un tableau ...
Vous pouvez donc utiliser les mêmes méthodes pour copier un tableau, ce qui est très facile dans ES6
Par exemple, vous pouvez utiliser ...
Imaginez que vous avez cet ensemble ci-dessous:
const a = new Set(["Alireza", "Dezfoolian", "is", "a", "developer"]);
Vous pouvez simplement le convertir en utilisant:
const b = [...a];
et le résultat est:
["Alireza", "Dezfoolian", "is", "a", "developer"]
Un tableau et maintenant vous pouvez utiliser toutes les méthodes que vous pouvez utiliser pour un tableau ...
Autres façons courantes de le faire:
const b = Array.from(a);
ou en utilisant des boucles comme:
const b = [];
a.forEach(v => b.Push(v));