Colecciones Maps
En JavaScript, un Map es una colección que almacena pares clave-valor, donde cada clave es única. A diferencia de los objetos tradicionales, los Map permiten usar cualquier tipo de dato como clave, no solo cadenas de texto o símbolos.
1. Qué es un Map? #
Un Map es una estructura que permite almacenar datos en forma de pares clave-valor. Puedes pensar en un Map como una especie de "diccionario" en el que buscas valores utilizando claves.
Ejemplo básico de un Map:
1let mapa = new Map(); 2 3mapa.set('nombre', 'Juan'); 4mapa.set('edad', 30); 5 6console.log(mapa.get('nombre')); // Muestra "Juan" 7console.log(mapa.get('edad')); // Muestra 30Salida de consola Juan 30
En este ejemplo:
'nombre'es una clave, y'Juan'es el valor asociado.'edad'es otra clave, y30es su valor.
Cómo crear un Map #
Puedes crear un Map usando el constructor Map(). Puedes inicializarlo vacío o pasarle un array de pares clave-valor.
Ejemplo de creación de un Map:
1// Creando un Map vacío 2let miMapa = new Map(); 3 4// Creando un Map con valores iniciales 5let otroMapa = new Map([ 6 ['nombre', 'Ana'], 7 ['edad', 25] 8]); 9 10console.log(otroMapa.get('nombre')); // Muestra "Ana"Salida de consola Ana
Métodos y propiedades de los Map #
-
set(clave, valor):- Agrega un nuevo par clave-valor al
Mapo actualiza el valor si la clave ya existe. - Ejemplo:
1let miMapa = new Map(); 2 3miMapa.set('color', 'rojo'); 4miMapa.set('color', 'azul'); // Actualiza el valor de la clave 'color' 5console.log(miMapa); // Muestra azulSalida de consola Map(1) { 'color' => 'azul' }
- Agrega un nuevo par clave-valor al
-
get(clave):- Devuelve el valor asociado a la clave especificada.
- Ejemplo:
1let miMapa = new Map(); 2miMapa.set('color', 'azul'); 3console.log(miMapa.get('color')); // Muestra "azul"Salida de consola azul
-
has(clave):- Verifica si una clave existe en el
Map. - Ejemplo:
1let miMapa = new Map(); 2miMapa.set('color', 'azul'); 3console.log(miMapa.has('color')); // true 4console.log(miMapa.has('tamaño')); // falseSalida de consola true false
- Verifica si una clave existe en el
-
delete(clave):- Elimina el par clave-valor asociado a la clave especificada.
- Ejemplo:
1let miMapa = new Map(); 2miMapa.set('color', 'azul'); 3miMapa.delete('color'); 4console.log(miMapa.has('color')); // falseSalida de consola false
-
size:- Devuelve el número de pares clave-valor en el
Map. - Ejemplo:
1let miMapa = new Map(); 2miMapa.set('color', 'azul'); 3console.log(miMapa.size); // Muestra 1Salida de consola 1
- Devuelve el número de pares clave-valor en el
-
clear():- Elimina todos los pares clave-valor del
Map. - Ejemplo:
1let miMapa = new Map(); 2miMapa.set('uno', 1); 3miMapa.set('dos', 2); 4miMapa.clear(); 5console.log(miMapa.size); // Muestra 0Salida de consola 0
- Elimina todos los pares clave-valor del
Iteración sobre un Map #
Puedes iterar sobre los elementos de un Map de varias formas:
-
forEach():- Ejecuta una función para cada par clave-valor.
- Ejemplo:
1let miMapa = new Map(); 2miMapa.set('nombre', 'Ana'); 3miMapa.set('edad', 25); 4miMapa.forEach((valor, clave) => { 5 console.log(clave + ' = ' + valor); 6});Salida de consola nombre = Ana edad = 25
-
for...of:- Puedes usar
for...ofpara iterar sobre las claves, valores o ambos. - Ejemplo:
1let miMapa = new Map(); 2miMapa.set('nombre', 'Ana'); 3miMapa.set('edad', 25); 4for (let [clave, valor] of miMapa) { 5 console.log(clave + ' = ' + valor); 6}Salida de consola nombre = Ana edad = 25
- Puedes usar
-
keys(),values(),entries():-
keys(): Devuelve un iterador con las claves.1let miMapa = new Map(); 2miMapa.set('nombre', 'Ana'); 3miMapa.set('edad', 25); 4for (let clave of miMapa.keys()) { 5 console.log(clave); // Muestra "nombre" y "edad" 6}Salida de consola nombre edad
-
values(): Devuelve un iterador con los valores.1let miMapa = new Map(); 2miMapa.set('nombre', 'Ana'); 3miMapa.set('edad', 25); 4for (let valor of miMapa.values()) { 5 console.log(valor); 6}Salida de consola Ana 25
-
entries(): Devuelve un iterador con los pares clave-valor (es el predeterminado parafor...of).1let miMapa = new Map(); 2miMapa.set('nombre', 'Ana'); 3miMapa.set('edad', 25); 4for (let valor of miMapa.entries()) { 5 console.log(valor); 6}Salida de consola [ 'nombre', 'Ana' ] [ 'edad', 25 ]
-
Diferencias entre Map y objetos #
Aunque los Map y los objetos son colecciones clave-valor, existen diferencias importantes:
- Tipos de clave: En un objeto, las claves son siempre cadenas o símbolos, mientras que en un
Mappueden ser de cualquier tipo (incluyendo objetos, funciones, etc.). - Orden: En un
Map, los elementos se mantienen en el orden en que se añadieron, lo que no siempre es cierto para las claves de un objeto. - Propiedades integradas: Los objetos tienen un prototipo, lo que significa que pueden heredar propiedades y métodos, mientras que un
Mapno tiene prototipo y solo contiene lo que tú le agregas.
Resumen del tema
Conceptos clave #
- Colección Clave-Valor Arbitraria: estructura que admite cualquier tipo de dato como clave (números, objetos, funciones, booleanos) preservando el orden estricto de inserción.
- API Fundamental:
set(clave, valor): añade o actualiza una entrada.get(clave): recupera el valor asociado (oundefinedsi no existe).has(clave),delete(clave),clear(),size.
- Iterabilidad Directa: métodos
.keys(),.values(),.entries()e iteración por desestructuraciónfor (let [clave, valor] of map). - Ventajas vs Objetos Simples: sin colisiones con propiedades del prototipo, claves no stringificadas y medición directa de longitud con
.size.
Qué debes recordar #
Usa Map cuando necesites asociar pares clave-valor donde las claves sean complejas/dinámicas, o requieras orden garantizado de inserción y lectura de tamaño directa con .size.