Un Map es una colección de pares clave → valor. Suena parecido a un objeto, pero tiene superpoderes que un objeto normal no tiene.
Lo creamos con new Map(). Puede partir vacío o de un array de pares [clave, valor]:
const vacio = new Map()
const edades = new Map([
['Dani', 18],
['Eva', 25]
])
console.log(edades) // Map(2) { 'Dani' => 18, 'Eva' => 25 }
.set()Añade o actualiza un par clave-valor. Devuelve el propio Map, así que se puede encadenar:
const edades = new Map()
edades.set('Dani', 18).set('Eva', 25)
console.log(edades.get('Dani')) // 18
.get()Obtiene el valor asociado a una clave. Si la clave no existe, devuelve undefined:
const edades = new Map([['Dani', 18]])
console.log(edades.get('Dani')) // 18
console.log(edades.get('Nadie')) // undefined
.has()Comprueba si una clave existe en el Map:
const edades = new Map([['Dani', 18]])
console.log(edades.has('Dani')) // true
console.log(edades.has('Eva')) // false
.delete() y .clear().delete() elimina una entrada por su clave; .clear() lo vacía entero:
const edades = new Map([
['Dani', 18],
['Eva', 25]
])
edades.delete('Dani')
console.log(edades) // Map(1) { 'Eva' => 25 }
edades.clear()
console.log(edades.size) // 0
.sizeNos dice cuántas entradas tiene:
const edades = new Map([['Dani', 18]])
console.log(edades.size) // 1
En un objeto normal, las claves siempre acaban siendo string (o symbol). En un Map, la clave puede ser lo que quieras: un número, un objeto, una función...
const usuario = { id: 1 }
const datos = new Map()
datos.set(usuario, 'es admin')
datos.set(42, 'la respuesta')
console.log(datos.get(usuario)) // 'es admin'
console.log(datos.get(42)) // 'la respuesta'
NotaLas claves de tipo objeto se comparan por referencia. Para recuperar un valor tienes que usar exactamente la misma referencia que usaste al guardarlo.
Un Map también es iterable y, además, mantiene el orden de inserción:
const edades = new Map([
['Dani', 18],
['Eva', 25]
])
for (const [nombre, edad] of edades) {
console.log(`${nombre} tiene ${edad} años`)
}
// Dani tiene 18 años
// Eva tiene 25 años
Tienes métodos específicos para recorrer claves, valores o ambos:
const edades = new Map([['Dani', 18], ['Eva', 25]])
console.log([...edades.keys()]) // ['Dani', 'Eva']
console.log([...edades.values()]) // [18, 25]
console.log([...edades.entries()]) // [['Dani', 18], ['Eva', 25]]
Usa un Map cuando:
.size.Usa un objeto cuando:
{ name, age }).. y JSON.Inicia sesión
Para guardar tu progreso y desbloquear logros