Objet Map
Les objets Map contiennent des paires clé-valeur. N'importe quelle valeur (un objet ou une valeur primitive) peut être utilisée comme clé ou comme valeur.
Différence entre les Maps et les Objects
- Les clés d'un Object ne peuvent être que des chaînes de caractères ou des Symbols, mais les clés d'un Map peuvent être n'importe quelle valeur.
- Les paires clé-valeur dans un Map sont ordonnées (principe FIFO), alors que les clés ajoutées à un objet ne le sont pas.
- Le nombre de paires clé-valeur dans une Map peut être obtenu à partir de la propriété size, tandis que le nombre dans un Object ne peut être calculé que manuellement.
- Les objets ont leur propre prototype, et les noms de clés sur la chaîne de prototypes peuvent entrer en conflit avec les noms de clés que vous définissez sur l'objet.

Clé dans une Map
La clé est une chaîne de caractères
var myMap = new Map();
var keyString = "a string";
myMap.set(keyString, "The value associated with the key 'a string'");
myMap.get(keyString);
myMap.get("a string");
La clé est un objet
var myMap = new Map();
var keyObj = {},
myMap.set(keyObj, "La valeur associée à la clé keyObj");
myMap.get(keyObj);
myMap.get({});
La clé est une fonction
var myMap = new Map();
var keyFunc = function () {},
myMap.set(keyFunc, "La valeur associée à la clé keyFunc");
myMap.get(keyFunc);
myMap.get(function() {})
La clé est NaN
var myMap = new Map();
myMap.set(NaN, "pas un nombre");
myMap.get(NaN);
var otherNaN = Number("foo");
myMap.get(otherNaN);
Bien que NaN ne soit égal à aucune valeur, même pas à lui-même (NaN !== NaN renvoie true), en tant que clé de Map, NaN ne fait aucune différence.
Itération de Map
Pour parcourir un Map, les deux qui suivent sont les plus puissantes.
for...of
var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
for (var [key, value] of myMap) {
console.log(key + " = " + value);
}
for (var [key, value] of myMap.entries()) {
console.log(key + " = " + value);
}
for (var key of myMap.keys()) {
console.log(key);
}
for (var value of myMap.values()) {
console.log(value);
}
forEach()
var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
myMap.forEach(function(value, key) {
console.log(key + " = " + value);
}, myMap)
Opérations sur les objets Map
Conversion entre Map et Array
var kvArray = [["key1", "value1"], ["key2", "value2"]];
var myMap = new Map(kvArray);
var outArray = Array.from(myMap);
Clonage d'une Map
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);
var myMap2 = new Map(myMap1);
console.log(original === clone);
Fusion de Maps
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
var merged = new Map([...first, ...second]);
Objet Set
Les objets Set vous permettent de stocker des valeurs uniques de tout type, qu'il s'agisse de valeurs primitives ou de références d'objets.
Valeurs spéciales dans Set
Les valeurs stockées dans un objet Set sont toujours uniques, il est donc nécessaire de déterminer si deux valeurs sont strictement égales. Quelques valeurs spéciales nécessitent un traitement particulier :
- +0 et -0 sont strictement égaux lors de la détermination de l'unicité pour le stockage, donc ils ne sont pas dupliqués ;
- undefined et undefined sont strictement égaux, donc ils ne sont pas dupliqués ;
- NaN et NaN ne sont pas strictement égaux, mais dans un Set, un seul peut être stocké, donc ils ne sont pas dupliqués.
Code
let mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add(5);
mySet.add("some text");
var o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2});
Conversion de type
Tableau
var mySet = new Set(["value1", "value2", "value3"]);
var myArray = [...mySet];
String
var mySet = new Set('hello');
Utilisation de l'objet Set
Dédoublonnage d'Array
var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet];
Union
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]);
Intersection
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x)));
Différence
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x)));