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 .

Spécification standard concernant l'ensemble

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow