Map e Set
Além dos objetos e arrays, o JavaScript oferece duas estruturas especializadas.
Map: pares chave-valor
Um Map associa chaves a valores. Diferente de um objeto comum,
suas chaves podem ser de qualquer tipo (até objetos ou funções) e
ele lembra a ordem de inserção.
const estoque = new Map();
estoque.set("maçãs", 50);
estoque.set("peras", 30);
console.log(estoque.get("maçãs")); // 50
console.log(estoque.has("peras")); // true
console.log(estoque.size); // 2
estoque.delete("peras");
Você pode percorrê-lo facilmente:
for (const [fruta, quantidade] of estoque) {
console.log(fruta, quantidade);
}
Set: valores únicos
Um Set é uma coleção de valores sem duplicatas.
const etiquetas = new Set(["js", "web", "js"]);
console.log(etiquetas.size); // 2 (a duplicata é ignorada)
etiquetas.add("css");
console.log(etiquetas.has("web")); // true
Um truque comum: remover duplicatas de um array.
const unicos = [...new Set([1, 1, 2, 3, 3])]; // [1, 2, 3]
Quando usar cada um?
Map: quando você precisa de um dicionário com chaves não-string ou com ordem.Set: quando só importa a pertinência e a unicidade.
Exemplos
Contar frequências com Map
const palavras = ["sol", "mar", "sol", "luz", "mar", "sol"];
const contagem = new Map();
for (const p of palavras) {
contagem.set(p, (contagem.get(p) || 0) + 1);
}
console.log([...contagem.entries()]);
União de dois conjuntos com Set
const a = new Set([1, 2, 3]);
const b = new Set([3, 4, 5]);
const uniao = new Set([...a, ...b]);
console.log([...uniao]);