Recherche…
Introduction
L'objet Set vous permet de stocker des valeurs uniques de tout type, qu'il s'agisse de valeurs primitives ou de références d'objet.
Les objets définis sont des collections de valeurs. Vous pouvez parcourir les éléments d'un ensemble dans l'ordre d'insertion. Une valeur dans le jeu ne peut se produire une fois; il est unique dans la collection du set. Les valeurs distinctes sont discriminées à l'aide de l'algorithme de comparaison SameValueZero .
Syntaxe
- nouvel ensemble ([itérable])
- mySet.add (valeur)
- mySet.clear ()
- mySet.delete (valeur)
- mySet.entries ()
- mySet.forEach (rappel [, thisArg])
- mySet.has (valeur)
- mySet.values ()
Paramètres
Paramètre | Détails |
---|---|
itérable | Si un objet itérable est transmis, tous ses éléments seront ajoutés au nouvel ensemble. null est traité comme non défini. |
valeur | La valeur de l'élément à ajouter à l'objet Set. |
rappeler | Fonction à exécuter pour chaque élément. |
thisArg | Optionnel. Valeur à utiliser lors de l'exécution du rappel. |
Remarques
Chaque valeur de l'ensemble devant être unique, la valeur d'égalité sera vérifiée et ne repose pas sur le même algorithme que celui utilisé dans l'opérateur ===. Plus précisément, pour les ensembles, +0 (qui est strictement égal à -0) et -0 sont des valeurs différentes. Cependant, cela a été modifié dans la dernière spécification ECMAScript 6. À partir de Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (bug 952870) et d'une récente nocturne, Chrome, +0 et -0 sont traités comme la même valeur dans les objets Set. De plus, NaN et indéfini peuvent également être stockés dans un ensemble. NaN est considéré comme NaN (même si NaN! == NaN).
Créer un ensemble
L'objet Set vous permet de stocker des valeurs uniques de tout type, qu'il s'agisse de valeurs primitives ou de références d'objet.
Vous pouvez envoyer des éléments dans un ensemble et les réitérer comme un tableau JavaScript simple, mais contrairement au tableau, vous ne pouvez pas ajouter de valeur à un ensemble si la valeur existe déjà.
Pour créer un nouvel ensemble:
const mySet = new Set();
Ou vous pouvez créer un ensemble à partir de n'importe quel objet itérable pour lui donner des valeurs de départ:
const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);
Dans l'exemple ci-dessus, le contenu défini serait {1, 2, 3, 4, 5}
. Notez que la valeur 4 apparaît une seule fois, contrairement au tableau d'origine utilisé pour le créer.
Ajout d'une valeur à un ensemble
Pour ajouter une valeur à un ensemble, utilisez la .add()
:
mySet.add(5);
Si la valeur existe déjà dans l'ensemble, elle ne sera plus ajoutée, car les ensembles contiennent des valeurs uniques.
Notez que la .add()
renvoie le jeu lui-même, vous pouvez donc enchaîner les appels:
mySet.add(1).add(2).add(3);
Supprimer la valeur d'un ensemble
Pour supprimer une valeur d'un ensemble, utilisez la méthode .delete()
:
mySet.delete(some_val);
Cette fonction retournera true
si la valeur existait dans l'ensemble et a été supprimée, ou false
sinon.
Vérifier si une valeur existe dans un ensemble
Pour vérifier si une valeur donnée existe dans un ensemble, utilisez la méthode .has()
:
mySet.has(someVal);
Renvoie true
si someVal
apparaît dans l'ensemble, false
sinon.
Effacer un ensemble
Vous pouvez supprimer tous les éléments d'un ensemble en utilisant la méthode .clear()
:
mySet.clear();
Obtenir la longueur définie
Vous pouvez obtenir le nombre d'éléments à l'intérieur de l'ensemble en utilisant la propriété .size
const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4
Contrairement à Array.prototype.length
, cette propriété est en lecture seule, ce qui signifie que vous ne pouvez pas la modifier en lui attribuant quelque chose:
mySet.size = 5;
mySet.size; // 4
En mode strict, il génère même une erreur:
TypeError: Cannot set property size of #<Set> which has only a getter
Conversion des ensembles en tableaux
Parfois , vous devrez peut - être convertir un ensemble à un tableau, par exemple pour pouvoir utiliser Array.prototype
méthodes comme .filter()
. Pour ce faire, utilisez Array.from()
ou l' destructuring-assignment
:
var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];
Maintenant, vous pouvez filtrer le tableau pour ne contenir que des nombres pairs et le reconvertir en Set à l'aide du constructeur Set:
mySet = new Set(myArray.filter(x => x % 2 === 0));
mySet
ne contient plus que des nombres pairs:
console.log(mySet); // Set {2, 4}
Intersection et différence dans les ensembles
Il n'y a pas de méthodes intégrées pour l'intersection et la différence dans les ensembles, mais vous pouvez toujours y parvenir, mais en les convertissant en tableaux, en les filtrant et en les reconvertissant en ensembles:
var set1 = new Set([1, 2, 3, 4]),
set2 = new Set([3, 4, 5, 6]);
const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));//Set {3, 4}
const difference = new Set(Array.from(set1).filter(x => !set2.has(x))); //Set {1, 2}
Ensembles d'itération
Vous pouvez utiliser une simple boucle for-it pour parcourir un jeu:
const mySet = new Set([1, 2, 3]);
for (const value of mySet) {
console.log(value); // logs 1, 2 and 3
}
Lors d'une itération sur un ensemble, il renverra toujours des valeurs dans l'ordre dans lequel elles ont été ajoutées pour la première fois à l'ensemble. Par exemple:
const set = new Set([4, 5, 6])
set.add(10)
set.add(5) //5 already exists in the set
Array.from(set) //[4, 5, 6, 10]
Il existe également une méthode .forEach()
, similaire à Array.prototype.forEach()
. Il dispose de deux paramètres, le callback
, qui sera exécuté pour chaque élément, et en option thisArg
, qui seront utilisés comme this
lors de l' exécution de callback
.
callback
a trois arguments. Les deux premiers arguments sont à la fois l'élément actuel de Set (pour des Array.prototype.forEach()
de cohérence avec Array.prototype.forEach()
et Map.prototype.forEach()
) et le troisième argument est le jeu lui-même.
mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3