JavaScript Fundamentals

Hashmaps en JavaScript: Objetos vs. el objeto Map

Spread the love

Hashmaps en JavaScript: Objetos vs. el objeto Map

JavaScript no tiene un equivalente directo a «HashMap» como otros lenguajes. Sin embargo, podemos lograr una funcionalidad similar usando dos enfoques principales: objetos JavaScript simples y el objeto Map integrado. Este artículo explora ambos, comparando sus fortalezas y debilidades para ayudarte a elegir el mejor enfoque para tus necesidades.

Tabla de contenido

Usando Objetos como Hashmaps

Los objetos JavaScript pueden funcionar como hashmaps simples. Usan claves de tipo cadena para acceder a los valores asociados. Este enfoque es sencillo pero tiene limitaciones.

Ejemplo:


const myHashMap = {}; // Crea un objeto vacío

// Insertar pares clave-valor
myHashMap.apple = 1;
myHashMap.banana = 2;
myHashMap.cherry = 3;

// Acceder a los valores
console.log(myHashMap.banana); // Salida: 2

// Comprobar si existe una clave
console.log('apple' in myHashMap); // Salida: true

// Eliminar un par clave-valor
delete myHashMap.banana;

// Iterar sobre los pares clave-valor (Nota: el orden no está garantizado)
for (const key in myHashMap) {
  console.log(key, myHashMap[key]);
}

Ventajas:

  • Simple y familiar para los desarrolladores JavaScript.
  • Sin dependencias externas.

Desventajas:

  • Las claves están limitadas a cadenas (o valores que se convierten implícitamente a cadenas).
  • No tiene una propiedad de tamaño integrada; debes rastrear el tamaño manualmente.
  • Carece de métodos integrados como get, set, has, etc.
  • El orden de las claves no está garantizado.

Usando el objeto Map

El objeto Map (introducido en ES6) ofrece una solución más robusta. Soporta cualquier tipo de dato como clave, evita problemas de coerción de tipo y proporciona métodos integrados para una manipulación eficiente.

Ejemplo:


const myMap = new Map();

// Insertar pares clave-valor
myMap.set("apple", 1);
myMap.set(123, "number"); // Número como clave
myMap.set({ a: 1 }, "object"); // Objeto como clave

// Acceder a los valores
console.log(myMap.get("apple")); // Salida: 1
console.log(myMap.get(123));     // Salida: "number"

// Comprobar si existe una clave
console.log(myMap.has("apple")); // Salida: true

// Eliminar un par clave-valor
myMap.delete("apple");

// Obtener el tamaño
console.log(myMap.size); // Salida: 2

// Iterar sobre los pares clave-valor (el orden se mantiene)
for (const [key, value] of myMap) {
  console.log(key, value);
}

Ventajas:

  • Soporta cualquier tipo de dato como clave.
  • Proporciona métodos integrados (set, get, has, delete, size).
  • Iteración eficiente con bucles for...of.
  • Conserva el orden de inserción.

Desventajas:

  • Requiere compatibilidad con ES6 (aunque hay polillenos disponibles).

Conclusión

Mientras que los objetos JavaScript simples pueden ser suficientes para un comportamiento simple similar a un hashmap, el objeto Map generalmente se recomienda por sus características superiores y eficiencia. A menos que tengas restricciones severas de compatibilidad con el navegador, Map es la opción preferida para la mayoría de los proyectos JavaScript modernos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *