Los Map en JavaScript son estructuras nativas pensadas para almacenar datos mediante un sistema de claves y valores, también conocido como pares clave-valor. Son ideales cuando necesitamos asociar información con una clave específica, y su sintaxis es muy intuitiva.

javascriptCopiarEditarconst mapa1 = new Map(); // Mapa vacío
const mapa2 = new Map([[1, "uno"]]); // Un par clave-valor
const mapa3 = new Map([[1, "uno"], [2, "dos"], [3, "tres"]]);

En este último ejemplo, mapa3 contiene tres entradas, donde las claves 1, 2 y 3 están asociadas a los valores “uno”, “dos” y “tres”, respectivamente.

¿Qué es un Map en JavaScript?

Aunque se asemejan a los objetos ({}), los Map ofrecen ventajas como permitir cualquier tipo de dato como clave y mantener el orden de inserción. Además, no sufren de colisiones de claves predefinidas como toString, lo cual sí ocurre en objetos.

Métodos y propiedades clave:

Método/PropiedadDescripción
.sizeDevuelve cuántos elementos contiene el Map.
.set(clave, valor)Asigna un valor a una clave (o la actualiza si ya existe).
.get(clave)Recupera el valor asociado a una clave.
.has(clave)Verifica si la clave está presente en el Map.
.delete(clave)Elimina una entrada por su clave.
.clear()Elimina todos los elementos del Map.

Ejemplo:

javascriptCopiarEditarconst mapa = new Map();
mapa.set("nombre", "Luis");
mapa.set("edad", 30);
mapa.get("nombre"); // "Luis"

Importante sobre .set()

Si usas .set() con una clave existente, el valor anterior será reemplazado. Además, a diferencia de los objetos tradicionales, las claves pueden ser objetos, funciones o cualquier tipo de dato.

Convertir un Map a Array

Puedes transformar un Map en un array fácilmente con el operador de propagación (...):

javascriptCopiarEditarconst mapa = new Map([[1, "uno"], [2, "dos"]]);
const array = [...mapa]; // [[1, "uno"], [2, "dos"]]

Si necesitas una copia segura de los datos (especialmente si hay objetos anidados), puedes usar structuredClone() para evitar modificar el original.

¿Qué es un WeakMap?

Los WeakMap son similares a los Map, pero con ciertas limitaciones y beneficios relacionados con el uso eficiente de la memoria:

  • Solo aceptan objetos como claves (no strings, números, etc.).
  • Las referencias son débiles, lo que significa que si un objeto clave ya no está referenciado en otro lugar, será eliminado automáticamente por el recolector de basura.

Ejemplo:

javascriptCopiarEditarlet clave = { id: 1 };
const mapa = new WeakMap();
mapa.set(clave, "activo");

clave = null; // El objeto será eliminado automáticamente del WeakMap cuando sea necesario

Comparativa entre Map, WeakMap y Object

CaracterísticaMapWeakMapObject
Permite claves primitivas✅*
Almacenamiento ordenado
Conversión directa a Array
Eliminación automática (GC)
Tamaño mediante .size

* Solo cadenas y símbolos

Diferencias clave con objetos:

Los objetos pueden sobrescribir métodos como .toString() al asignar propiedades con ese nombre, lo que puede generar errores. Los Map, en cambio, mantienen separados sus métodos internos de las claves que almacenas:

javascriptCopiarEditarconst obj = {};
obj.toString = 123;
obj.toString(); // Error

const mapa = new Map([["toString", 456]]);
mapa.toString(); // Funciona correctamente