Saltar al contenido principal
12Sets y Maps

¿Qué son Set y Map?

Hasta ahora hemos guardado colecciones de datos con dos estructuras: los arrays y los objetos. Pero JavaScript tiene dos estructuras más que nos resuelven problemas muy concretos: Set y Map.

Nota

Un Set es una colección de valores únicos. Un Map es una colección de pares clave-valor donde la clave puede ser de cualquier tipo.

¿Por qué no me basta con arrays y objetos?

Los arrays y los objetos son geniales, pero tienen limitaciones:

  • Un array permite valores repetidos. Si necesitas garantizar que no haya duplicados, te toca comprobarlo a mano.
  • Un objeto solo admite claves de tipo string o symbol. Si intentas usar un número o un objeto como clave, JavaScript lo convierte a texto.
const obj = {}
obj[1] = 'número uno'
obj['1'] = 'texto uno'

console.log(obj) // { '1': 'texto uno' }
// ¡La clave 1 y la clave '1' son la misma!

Set y Map nacen precisamente para cubrir estos casos.

Un vistazo rápido a Set

Un Set guarda valores y se asegura de que nunca se repitan:

const numeros = new Set()

numeros.add(1)
numeros.add(2)
numeros.add(2) // este se ignora, ya existe

console.log(numeros) // Set(2) { 1, 2 }

Un vistazo rápido a Map

Un Map guarda pares de clave → valor, y la clave puede ser cualquier cosa: un número, un objeto, una función...

const edades = new Map()

edades.set('Dani', 18)
edades.set('Eva', 25)

console.log(edades.get('Dani')) // 18
Infografía
Array, Set y Map con los mismos datos
4.Resultado: el array tiene 3 elementos, el Set 2 valores únicos y el Map 2 claves, cada una con su recuento.
Paso 4 de 4

¿Cuándo uso cada uno?

Necesito...Uso
Una lista de valores sin duplicadosSet
Asociar claves a valores (claves de cualquier tipo)Map
Una colección ordenada con acceso por índiceArray
Modelar una entidad con propiedades conocidasObjeto
Nota

Regla rápida: si te importa la unicidad, piensa en Set. Si te importa asociar una clave con un valor (sobre todo si la clave no es un string), piensa en Map.

En las siguientes clases veremos cada una en profundidad. ¡Vamos a por ello!