Tablas hash/matrices asociativas en JavaScript:¿cómo y por qué?

JavaScript no tiene una clase de objeto nativa llamada "tabla hash", pero eso no significa que la funcionalidad de las tablas hash no exista en el lenguaje. Aquí se explica cómo usar tablas hash en JavaScript, con un código de ejemplo funcional.

¿Qué es una tabla hash?

También conocido como mapas hash , las tablas hash son una estructura de datos que asigna una lista de claves a una lista de valores correspondientes para cada clave. Cualquier valor en la tabla se puede recuperar accediendo a él a través de la clave asociada.

En segundo plano, la tabla hash usará una función hash para convertir la clave en un índice que se puede usar para buscar rápidamente el valor asociado. Esto los convierte en una forma eficaz de almacenar datos efímeros de cualquier longitud.

Matrices asociativas

Una forma de tablas hash son las matrices asociativas en PHP. Si está buscando la misma funcionalidad que ofrecen las matrices asociativas, el siguiente ejemplo debería cubrirlo.

¿Se pueden usar objetos JavaScript como tablas hash?

Los objetos de JavaScript se pueden usar como tablas hash, pero carecen de alguna funcionalidad. Tome el siguiente objeto por ejemplo:

var myObject = {
    "ACME Plumbing": "123 Fake Street",
    "FOOBAR Pool Services": "198 Pretend Place"
};

Es un objeto simple que almacena valores de una libreta de direcciones como pares clave/valor:el nombre de la empresa es la clave y la dirección de la empresa es el valor.

Esto parece ajustarse a la definición de una tabla hash (y técnicamente, la clase Object almacena cosas de la misma manera):los pares de valores clave se almacenan y se pueden recuperar como propiedades del objeto, pero hay algunos inconvenientes.

La clase de objeto de JavaScript incluye muchas otras cosas para la manipulación de objetos. Estas propiedades y métodos pueden entrar en conflicto con los datos que planea almacenar en la tabla.

La clase Object tampoco es consciente de su propia longitud, por lo que debe iterarse para averiguar cuántas entradas hay.

Lo más importante es que encontrará problemas al enumerar los valores que ha almacenado en el orden en que fueron almacenados:los objetos de JavaScript no siempre siguen el orden de inserción de los elementos dentro de ellos cuando se iteran.

Prácticas recomendadas de tablas hash:uso de la clase de mapa

El objeto Mapa en JavaScript proporciona la funcionalidad completa de una tabla hash o mapa hash. Contiene pares de valores clave y recuerda el orden específico en que se insertaron en la tabla. Además, no le permitirá insertar valores que entren en conflicto con sus propios métodos o propiedades.

Si está buscando usar la funcionalidad de la tabla hash en su código, el objeto Map es la forma más fácil de hacerlo.

Ejemplo:usar un mapa para crear una tabla hash

El siguiente ejemplo demuestra cómo se usa el objeto Map para lograr la funcionalidad de mapa hash en JavaScript:

// Create a Map object
var myMap = new Map();

// Set some key/value pairs
myMap.set("ACME Plumbing", "123 Fake Street");
myMap.set("FOOBAR Pool Services", "198 Pretend Place");

// Retrieve a value by it's key
myMap.get("ACME Plumbing"); // "123 Fake Street"

// Map objects can be easily iterated over to get all values
for (let [key, value] of myMap) {
    console.log(key + ' :  ' + value);
}