Explicación sobre Map en JavaScript
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/Propiedad | Descripción |
---|---|
.size | Devuelve 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ística | Map | WeakMap | Object |
---|---|---|---|
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