Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Objets natifs standards
  5. Set

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

Set

Baseline Widely available *

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨juillet 2015⁩.

* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.

Un objetSet permet de stocker un ensemble de valeurs uniques de n'importe quel type, qu'il s'agisse devaleurs primitives ou d'objets.

Description

Les objetsSet sont des ensembles de valeurs. Il est possible d'itérer sur les éléments contenus dans l'objetSet dans leur ordre d'insertion.Une valeur donnée ne peut apparaître qu'une seule fois parSet, elle y est unique.

Égalité des valeurs

Chaque valeur d'unSet doit être unique, il faut donc tester l'égalité des valeurs contenues. Dans une version antérieure de la spécification ECMAScript, cette égalité n'était pas la même que celle de l'opérateur===. Notamment, pour les objetsSet,+0 (qui, selon l'égalité stricte, est égal à-0) et-0 étaient des valeurs différentes. Cela a toutefois été changé avec la dernière version d'ECMAScript 2015 (ES6). Voirle tableau de compatibilité ci-après quant à la prise en charge de l'égalité des clés pour0 et-0.

NaN etundefined peuvent être enregistrés dans un objetSet.NaN est considéré commeNaN (bien queNaN !== NaN).

Performance

Set dispose d'une méthodehas() qui permet de vérifier si une valeur est contenue dans l'objetSet et qui utilise une approche qui est, en moyenne, plus rapide que de tester les éléments qui ont été précédemment ajoutés àSet. Cette méthode est, en moyenne, plus rapide que la méthodeArray.prototype.includes() qui s'applique aux objetsArray lorsque la longueur (length) du tableau est égale à celle de l'objetSet (size).

Constructeur

Set()

Crée un nouvel objetSet.

Propriétés statiques

get Set[@@species]

La fonction de construction utilisée pour créer des objets dérivés.

Propriétés des instances

Set.prototype.size

Renvoie le nombre de valeurs contenues dans l'objetSet.

Méthodes des instances

Set.prototype.add(valeur)

Ajoute une valeur à l'objetSet et renvoie l'objetSet avec la valeur ajoutée.

Set.prototype.clear()

Supprime tous les éléments de l'objetSet.

Set.prototype.delete(valeur)

Supprime l'élément associé à la valeur en argument et renvoie un booléen indiquant si l'élément a été retiré avec succès. Par la suite,Set.prototype.has(valeur) renverrafalse.

Set.prototype.has(valeur)

Renvoie un booléen indiquant si la valeur fournie en argument est présente dans l'ensemble représenté par l'objetSet.

Méthodes d'itération

Set.prototype[@@iterator]()

Renvoie un nouvel itérateur fournissant lesvaleurs de chaque élément de l'objetSet, selon leur ordre d'insertion.

Set.prototype.values()

Renvoie un nouvel itérateur fournissant lesvaleurs de chaque élément de l'objetSet, selon leur ordre d'insertion.

Set.prototype.keys()

Un alias pourSet.prototype.values().

Set.prototype.entries()

Renvoie un nouvel objet itérateur qui contientun tableau[valeur, valeur] pour chaque élément de l'objetSet, selon leur ordre d'insertion.

Il s'agit d'une méthode analogue à celle disponible pourMap, c'est pour ça qu'on a le doublonnement de la valeur à la place de la clé.

Set.prototype.forEach(fnRappel[,thisArg])

Appelle la fonctionfnRappel une fois pour chaque valeur présente dans l'objetSet, selon leur ordre d'insertion. Si le paramètrethisArg est fourni, sa valeur sera utilisée comme valeur pourthis pour chaque appel defnRappel.

Exemples

Utiliser l'objetSet

js
const monSet = new Set();monSet.add(1); // { 1 }monSet.add(5); // { 1, 5 }monSet.add(5); // { 1, 5 }monSet.add("du texte"); // { 1, 5, 'du texte' }const o = { a: 1, b: 2 };monSet.add(o);monSet.add({ a: 1, b: 2 });// o fait référence à un objet différent// il n'y a pas de problème pour cet ajoutmonSet.has(1); // truemonSet.has(3); // false, 3 n'a pas été ajouté à l'ensemblemonSet.has(5); // truemonSet.has(Math.sqrt(25)); // truemonSet.has("Du Texte".toLowerCase()); // truemonSet.has(o); // truemonSet.size; // 5monSet.delete(5); // retire 5 du setmonSet.has(5); // false, 5 a été retiré de l'ensemblemonSet.size; // 4, on a retiré une valeur de l'ensembleconsole.log(monSet);// affiche Set(4) [ 1, "du texte", {…}, {…} ] pour Firefox// affiche Set(4) { 1, "du texte", {…}, {…} } pour Chrome

Itérer sur des ensembles

js
// On itère sur les différents éléments de l'ensemble// ici on affiche : 1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of monSet) console.log(item);// ici on affiche les clés de l'ensemble : 1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of monSet.keys()) console.log(item);// ici on affiche les valeurs de l'ensemble : 1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of monSet.values()) console.log(item);// ici on affiche les clés de l'ensemble : 1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}// (ici, les clés et les valeurs sont les mêmes)for (let [clé, valeur] of monSet.entries()) console.log(clé);// Une méthode de conversion avec Array.fromconst monTableau = Array.from(monSet); // [1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}]// Cela fonctionnera également dans un document HTMLmonSet.add(document.body);monSet.has(document.querySelector("body")); // true// convertir un tableau (Array) en ensemble (Set) et vice versaconst monSet2 = new Set([1, 2, 3, 4]);monSet2.size; // 4[...monSet2]; // [1, 2, 3, 4]// L'intersection peut être calculée avecconst intersection = new Set([...set1].filter((x) => set2.has(x)));// La différence pourra être simulée avecconst différence = new Set([...set1].filter((x) => !set2.has(x)));// On peut itérer sur les entrées d'un ensemble avec forEachmySet.forEach(function (value) {  console.log(value);});// 1// 2// 3// 4

Implémenter des opérations ensemblistes

js
function isSuperset(set, subset) {  for (let elem of subset) {    if (!set.has(elem)) {      return false;    }  }  return true;}function union(setA, setB) {  let _union = new Set(setA);  for (let elem of setB) {    _union.add(elem);  }  return _union;}function intersection(setA, setB) {  let _intersection = new Set();  for (let elem of setB) {    if (setA.has(elem)) {      _intersection.add(elem);    }  }  return _intersection;}function symmetricDifference(setA, setB) {  let _difference = new Set(setA);  for (let elem of setB) {    if (_difference.has(elem)) {      _difference.delete(elem);    } else {      _difference.add(elem);    }  }  return _difference;}function difference(setA, setB) {  let _difference = new Set(setA);  for (let elem of setB) {    _difference.delete(elem);  }  return _difference;}// Exemplesconst setA = new Set([1, 2, 3, 4]);const setB = new Set([2, 3]);const setC = new Set([3, 4, 5, 6]);isSuperset(setA, setB); // => trueunion(setA, setC); // => Set [1, 2, 3, 4, 5, 6]intersection(setA, setC); // => Set [3, 4]symmetricDifference(setA, setC); // => Set {1, 2, 5, 6}difference(setA, setC); // => Set [1, 2]

Relations avec les objetsArray

js
let monTableau = ["valeur1", "valeur2", "valeur3"];// On peut utiliser le constructeur Set pour transformer// un Array en Setlet monSet = new Set(monTableau);monSet.has("valeur1"); // renvoie true// Et utiliser l'opérateur de décomposition pour// transformer un Set en Array.console.log([...monSet]); // affichera la même chose que monTableau

Dédoublonner un tableau

js
const nombres = [2, 3, 4, 4, 2, 2, 2, 4, 4, 5, 5, 6, 6, 7, 5, 32, 3, 4, 5];console.log([...new Set(nombres)]);// affichera [2, 3, 4, 5, 6, 7, 32]

Les relations avec les objetsString

js
let texte = "India";const monSet = new Set(texte);// Set(5) {'I', 'n', 'd', 'i', 'a'}monSet.size;// 5// Sensibilité à la cassenew Set("Firefox");// Set(7) { "F", "i", "r", "e", "f", "o", "x" }new Set("firefox");// Set(6) { "f", "i", "r", "e", "o", "x" }

Utilisation deSet pour vérifier l'unicité des valeurs d'une liste

js
const tableau = Array.from(document.querySelectorAll("[id]")).map(function (e) {  return e.id;});const set = new Set(tableau);console.assert(set.size == tableau.length);

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-set-objects

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp