| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Keyed_collections | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Ce chapitre prsente les collections de donnes qui sont ordonnes avec une cl. Les objets Map et Set contiennent des lments sur lesquels on peut itrer dans leur ordre d'insertion.
MapECMAScript 2015 introduit une nouvelle structure de donnes pour faire correspondre des donnes entre elle. Un objet Map reprsente une collection de donnes qui sont des correspondances entre des cls ou valeurs et pour lequel on peut itrer dans l'ordre d'insertion pour lister les diffrentes cls / valeurs.
Le code suivant illustre certaines oprations basiques avec Map. Pour plus d'informations sur cet objet, voir galement la page de rfrence Map. Il est possible d'utiliser une boucle for...of pour renvoyer un tableau [cl, valeur] chaque itration.
var sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
for (var [key, value] of sayings) {
console.log(key + " goes " + value);
}
// "cat goes meow"
// "elephant goes toot"
Object et MapHabituellement, les objets objets ont t utiliss pour faire correspondre des chanes avec des valeurs. Les objets permettent d'associer des cls avec des valeurs, de rcuprer ces valeurs, de supprimer des cls, de dtecter si quelque chose est enregistr dans une cl. Le type Map possde cependant certains avantages pour tre utiliss comme maps.
Object sont des chanes de caractres. Pour Map, une cl peut tre une valeur de n'importe quel type.Map alors qu'il faut tenir compte manuellement du nombre de cls contenue dans un objet Object.Object possde un prototype, il y a donc des cls par dfaut dj prsentes dans l'objet. (cela peut tre surcharg en utilisant map = Object.create(null)).Pour savoir si on doit utiliser le type Map ou le type Object, on peut considrer les aspects suivants :
WeakMapL'objet WeakMap est une collection de paires cls/valeurs pour lesquelles les cls sont uniquement des objets (les valeurs peuvent tre d'un type arbitraire). Les rfrences vers les objets sont des rfrences faibles . Cela signifie qu'elles seront collectes par le ramasse-miettes s'il n'y a pas d'autres rfrences vers cet objet. L'API WeakMap offre les mmes fonctionnalits que l'API Map.
La diffrence entre le type Map et le type WeakMap est que les cls d'un objet WeakMap ne sont pas numrables (c'est--dire qu'on n'a pas de mthode pour donner la liste des cls). S'il en existait une, la liste dpendrait de l'tat d'avancement du ramasse-miettes, ce qui introduirait un non-dterminisme.
Pour plus d'informations et d'exemples, voir galement le paragraphe Pourquoi WeakMap ? sur l'article WeakMap de la rfrence.
Un cas d'utilisation des objets WeakMap est le stockage de donnes prives d'un objet ou pour cacher certains dtails d'implmentation. L'exemple qui suit est tir du billet de blog de Nick Fitzgerald Masquer des dtails d'implmentation avec les WeakMaps ECMAScript 6 . Les donnes et mthodes prives sont stockes dans l'objet WeakMap privates. Tout ce qui est expos par l'instance et le prototype est public. Tout ce qui est en dehors est inaccessible car privates n'est pas export depuis le module :
const privates = new WeakMap();
function Public() {
const me = {
// Les donnes prives ici
};
privates.set(this, me);
}
Public.prototype.method = function () {
const me = privates.get(this);
// On fait des choses avec les donnes prives dans `me`...
};
module.exports = Public;
SetLes objets Set sont des ensembles de valeurs. Il est possible de les parcourir dans l'ordre d'insertion des lments. Une valeur d'un lment Set ne peut y apparatre qu'une seule fois, il est unique pour cette instance de Set.
Le code suivant illustre certaines oprations basiques avec Set. Voir aussi la page Set pour plus d'exemples et l'API complte.
var monEnsemble = new Set();
monEnsemble.add(1);
monEnsemble.add("du texte");
monEnsemble.add("toto");
monEnsemble.has(1); // true
monEnsemble.delete("toto");
monEnsemble.size; // 2
for (let item of monEnsemble) console.log(item);
// 1
// "du texte"
Array) en ensembles (Set)Il est possible de crer un Array partir d'un Set grce Array.from ou l'oprateur de dcomposition. Pour effectuer la conversion dans l'autre sens, on peut utiliser le constructeur Set avec un argument de type Array. Encore une fois, les objets Set stockent des valeurs uniques, les lments dupliqus dans un tableau seront supprims lors de la conversion.
Array.from(monSet);
[...monSet2];
monSet2 = new Set([1, 2, 3, 4]);
Array et SetHistoriquement, on reprsentait des ensembles avec des tableaux JavaScript. Ce nouveau type, Set, possde certains avantages :
indexOf ce qui peut diminuer les performances.Set permettent de supprimer les lments avec leur valeur. Avec un tableau, il faudrait dcouper le tableau sur l'indice de l'lment.NaN ne peut pas tre trouve avec la mthode indexOf.Set permettent de stocker des valeurs uniques, il n'est pas ncessaire d'effectuer des vrifications manuellement.WeakSetLes objets WeakSet sont des ensembles d'objets. Un objet d'un WeakSet ne peut y apparatre qu'une seule fois maximum. On ne peut pas itrer sur les objets WeakSet (ils ne sont pas numrables).
Les principales diffrences avec l'objet Set sont :
Set, les objets WeakSet sont des ensembles qui ne comprennent que des objets, les valeurs ne peuvent pas tre d'un type arbitraire.WeakSet utilisent des rfrences faibles vers les objets. Ainsi, s'il n'y a pas d'autres rfrences vers l'objet stock dans le WeakSet, celui-ci pourra tre collect par le ramasse-miettes pour librer de la mmoire. Cela signifie galement qu'on ne peut pas maintenir une liste des diffrents objets contenus dans l'ensemble : les objets WeakSet ne sont pas numrables.Les cas d'utilisations pour les objets WeakSet objects sont relativement limits. Ils empcheront toute fuite mmoire donc on pourra, de faon scurise, les utiliser avec des lments DOM qui pourront tre des cls (pour les utiliser par ailleurs, etc.).
Map et SetL'galit utilise pour les cls des objets Map et celle utilise pour les valeurs des objets Set sont les mmes : elles sont bases sur l'algorithme suivant :
===.-0 et +0 sont considrs gaux.NaN est considr gal lui-mme (contrairement ce qu'on obtient avec ===).Cette page a t modifie le 22 mai 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |