Oggetti e array coprono molto, ma Set e Map risolvono in modo pulito problemi ricorrenti.
// Set: valori unici
const tag = new Set(["react", "js", "react", "css"]);
tag.size; // 3 (duplicati rimossi)
[...new Set([1, 1, 2, 3])]; // [1, 2, 3] -> dedupe in una riga
// Map: dizionario con chiavi di qualsiasi tipo
const cache = new Map();
cache.set("utente", { id: 1 });
cache.set(domElement, "dati"); // anche un oggetto come chiave!
cache.get("utente");
cache.has("utente"); // true
Un Set contiene solo valori unici: perfetto per deduplicare o verificare l'appartenenza (.has() è più veloce di array.includes su grandi liste). Un Map è come un oggetto, ma con due vantaggi: le chiavi possono essere di qualsiasi tipo (non solo stringhe) e mantiene l'ordine di inserimento, oltre a offrire .size e l'iterabilità diretta.
Regola pratica: se ti serve un insieme di valori unici, Set; se ti serve una mappa chiave-valore con chiavi non-stringa o iterazione ordinata, Map. La struttura dati giusta rende il codice più chiaro e spesso più veloce.