Sets y Maps
Los arrays no son la única forma de agrupar datos. Cuando lo que importa es que cada valor sea único, o que cada dato tenga una clave asociada de cualquier tipo (no solo texto, como en un objeto), JavaScript te da dos estructuras más especializadas: Set y Map.
Set: una colección de valores únicos
Un Set es como un array que nunca permite
duplicados — si intentas añadir un valor que ya existe, simplemente no pasa
nada. Es la forma más directa de eliminar duplicados de una lista:
Añade x al Set. Si ya existe, no hace nada.
true o false según si x está en el Set.
Elimina x del Set.
El número de elementos — no .length, esa es la trampa habitual al venir de arrays.
[...new Set(array)]
Los tres puntos (..., el operador spread) sacan
todos los valores del Set y los meten en un array nuevo. Es el patrón más
habitual en JavaScript para eliminar duplicados de una lista en una sola
línea.
Map: pares clave-valor, sin las limitaciones de un objeto
Un objeto normal solo admite strings (o Symbols) como clave. Un
Map admite cualquier valor como
clave — un número, un objeto, incluso una función — y mantiene el orden en
que se insertaron las claves, algo que un objeto tampoco garantiza.
Añade o actualiza un par clave-valor.
Devuelve el valor asociado, o undefined si no existe.
Comprueba si existe, o la elimina.
¿Cuándo usar cada uno?
Lista ordenada de valores, con repetidos permitidos. El caso general.
Cuando necesitas que cada valor aparezca una sola vez.
Datos con nombre fijo y conocido de antemano (nombre, precio, ciudad...).
Pares clave-valor donde las claves no son texto fijo, o cuando el orden de inserción importa.
Comprueba lo que has aprendido
1. ¿Qué pasa si intentas añadir un valor que ya existe a un Set?
2. ¿Qué propiedad usas para saber cuántos elementos tiene un Set?
3. ¿Qué ventaja principal tiene un Map sobre un objeto normal como estructura clave-valor?