La classe Map
permet de construire un objet ayant des clé et valeurs, sur le même principe qu’un objet normal, à la différence près que les clés des propriétés peuvent être de n’importe quel type — et non seulement des chaînes de caractère ou symboles [ES6].
var map = new Map([
[1, "1 number"],
["1", "1 string"],
[true, "true boolean"],
["true", "true string"]
]);
console.log(map); // { 1: "1 number", 1: "1 string", true: "true boolean", true: "true string" }
Permet de récupérer la valeur d’une clé donnée:
console.log(map.get(1)); // 1 number
console.log(map.get("1")); // 1 string
console.log(map.get(true)); // true boolean
console.log(map.get("true")); // true string
Permet d’ajouter des valeurs à l’objet.
Elle retourne l’objet, il est donc possible de chainer plusieurs set
à la suite.
map.set("key", "value");
Permet de vérifier si une clé donnée existe:
console.log(map.has("key")); // true
Permet de supprimer une clé:
console.log(map.delete("key")); // true
La propriété size
retourne le nombre d’élément de l’objet
console.log(map.size); // 4
Il y a différentes manières de boucler sur un objet Map
Boucler sur les clés/valeurs avec entries
for(var [key, value] of map.entries()) {
console.log(key, value);
}
C’est le comportement par défaut, obtenu si on essaie de boucler sur l’objet directement:
for(var [key, value] of map) {
console.log(key, value);
}
map.forEach((value, key) => {
console.log(key, value);
});
Boucler sur les clés avec keys
for(let key of map.keys()) {
console.log(key); // key
}
Boucler sur les valeurs avec values
for(let value of map.values()) {
console.log(value); // value
}
Permet de supprimer toutes les entrées de l’objet
map.clear();
Un objet WeakMap
fonctionne à peu près de la même manière qu’un objet Map
.
Les clés d’un objet WeakMap sont nécessairement des objets — les valeurs peuvent être de tout type.
Weakmap ne supporte pas les itérations, clear()
et size
.
Si on supprime une variable contenue dans un objet Map, la variable existera toujours dans cet objet.
Avec un Weakmap, la variable ne serait plus accessible et les données seraient libérées par le garbage collector.
var user = { name: "Bob" },
map = new Map([ [user, "1"] ]);
user = null;
for(var [key, value] of map) {
console.log(key, value); // { name: "Bob" } 1
}
// Avec un objet map: la variable supprimée existe toujours dans l'objet
// Avec un objet weakmap: la variable ne serait plus accessible et libérée de la mémoire