[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Set [Back]  [Original]

Set - JavaScript | MDN

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 English Always switch to English

Set

Baseline Large disponibilit *

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 bnficier de prise en charge variables.

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

Dans cet article

Description

Les objets Set sont des ensembles de valeurs. Il est possible d'itrer sur les lments contenus dans l'objet Set dans leur ordre d'insertion. Une valeur donne ne peut apparatre qu'une seule fois par Set, elle y est unique.

galit des valeurs

Chaque valeur d'un Set doit tre unique, il faut donc tester l'galit des valeurs contenues. Dans une version antrieure de la spcification ECMAScript, cette galit n'tait pas la mme que celle de l'oprateur ===. Notamment, pour les objets Set, +0 (qui, selon l'galit stricte, est gal -0) et -0 taient des valeurs diffrentes. Cela a toutefois t chang avec la dernire version d'ECMAScript 2015 (ES6). Voir le tableau de compatibilit ci-aprs quant la prise en charge de l'galit des cls pour 0 et -0.

NaN et undefined peuvent tre enregistrs dans un objet Set. NaN est considr comme NaN (bien que NaN !== NaN).

Performance

Set dispose d'une mthode has() qui permet de vrifier si une valeur est contenue dans l'objet Set et qui utilise une approche qui est, en moyenne, plus rapide que de tester les lments qui ont t prcdemment ajouts Set. Cette mthode est, en moyenne, plus rapide que la mthode Array.prototype.includes() qui s'applique aux objets Array lorsque la longueur (length) du tableau est gale celle de l'objet Set (size).

Constructeur

Set()

Cre un nouvel objet Set.

Proprits statiques

get Set[@@species]

La fonction de construction utilise pour crer des objets drivs.

Proprits des instances

Set.prototype.size

Renvoie le nombre de valeurs contenues dans l'objet Set.

Mthodes des instances

Set.prototype.add(valeur)

Ajoute une valeur l'objet Set et renvoie l'objet Set avec la valeur ajoute.

Set.prototype.clear()

Supprime tous les lments de l'objet Set.

Set.prototype.delete(valeur)

Supprime l'lment associ la valeur en argument et renvoie un boolen indiquant si l'lment a t retir avec succs. Par la suite, Set.prototype.has(valeur) renverra false.

Set.prototype.has(valeur)

Renvoie un boolen indiquant si la valeur fournie en argument est prsente dans l'ensemble reprsent par l'objet Set.

Mthodes d'itration

Set.prototype[@@iterator]()

Renvoie un nouvel itrateur fournissant les valeurs de chaque lment de l'objet Set, selon leur ordre d'insertion.

Set.prototype.values()

Renvoie un nouvel itrateur fournissant les valeurs de chaque lment de l'objet Set, selon leur ordre d'insertion.

Set.prototype.keys()

Un alias pour Set.prototype.values().

Set.prototype.entries()

Renvoie un nouvel objet itrateur qui contient un tableau [valeur, valeur] pour chaque lment de l'objet Set, selon leur ordre d'insertion.

Il s'agit d'une mthode analogue celle disponible pour Map, c'est pour a qu'on a le doublonnement de la valeur la place de la cl.

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

Appelle la fonction fnRappel une fois pour chaque valeur prsente dans l'objet Set, selon leur ordre d'insertion. Si le paramtre thisArg est fourni, sa valeur sera utilise comme valeur pour this pour chaque appel de fnRappel.

Exemples

Utiliser l'objet Set

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 rfrence  un objet diffrent
// il n'y a pas de problme pour cet ajout

monSet.has(1); // true
monSet.has(3); // false, 3 n'a pas t ajout  l'ensemble
monSet.has(5); // true
monSet.has(Math.sqrt(25)); // true
monSet.has("Du Texte".toLowerCase()); // true
monSet.has(o); // true

monSet.size; // 5

monSet.delete(5); // retire 5 du set
monSet.has(5); // false, 5 a t retir de l'ensemble

monSet.size; // 4, on a retir une valeur de l'ensemble
console.log(monSet);
// affiche Set(4) [ 1, "du texte", {}, {} ] pour Firefox
// affiche Set(4) { 1, "du texte", {}, {} } pour Chrome

Itrer sur des ensembles

js
// On itre sur les diffrents lments 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 cls 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 cls de l'ensemble : 1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}
// (ici, les cls et les valeurs sont les mmes)
for (let [cl, valeur] of monSet.entries()) console.log(cl);

// Une mthode de conversion avec Array.from
const monTableau = Array.from(monSet); // [1, "du texte", {"a": 1, "b": 2}, {"a": 1, "b": 2}]

// Cela fonctionnera galement dans un document HTML
monSet.add(document.body);
monSet.has(document.querySelector("body")); // true

// convertir un tableau (Array) en ensemble (Set) et vice versa
const monSet2 = new Set([1, 2, 3, 4]);
monSet2.size; // 4
[...monSet2]; // [1, 2, 3, 4]

// L'intersection peut tre calcule avec
const intersection = new Set([...set1].filter((x) => set2.has(x)));

// La diffrence pourra tre simule avec
const diffrence = new Set([...set1].filter((x) => !set2.has(x)));

// On peut itrer sur les entres d'un ensemble avec forEach
mySet.forEach(function (value) {
  console.log(value);
});

// 1
// 2
// 3
// 4

Implmenter des oprations 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;
}

// Exemples
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 3]);
const setC = new Set([3, 4, 5, 6]);

isSuperset(setA, setB); // => true
union(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 objets Array

js
let monTableau = ["valeur1", "valeur2", "valeur3"];

// On peut utiliser le constructeur Set pour transformer
// un Array en Set
let monSet = new Set(monTableau);

monSet.has("valeur1"); // renvoie true

// Et utiliser l'oprateur de dcomposition pour
// transformer un Set en Array.
console.log([...monSet]); // affichera la mme chose que monTableau

Ddoublonner 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 objets String

js
let texte = "India";

const monSet = new Set(texte);
// Set(5) {'I', 'n', 'd', 'i', 'a'}

monSet.size;
// 5

// Sensibilit  la casse
new Set("Firefox");
// Set(7) { "F", "i", "r", "e", "f", "o", "x" }

new Set("firefox");
// Set(6) { "f", "i", "r", "e", "o", "x" }

Utilisation de Set pour vrifier 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);

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-set-objects

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page