Matriz asociativa de JavaScript y tabla hash

Mehvish Ashiq 12 octubre 2023
  1. Crear matriz asociativa de JavaScript usando objetos
  2. Cree un array asociativa de JavaScript usando la función Map()
  3. Use un objeto JavaScript para implementar una tabla hash
Matriz asociativa de JavaScript y tabla hash

Aprenderemos a implementar un array asociativa de JavaScript y una tabla hash usando objetos y Map().

Aunque JavaScript no tiene arrays/tablas hash asociativas, excepto objetos. Pero hay otras formas de hacerlo.

Antes de profundizar en la implementación detallada, es necesario conocer la diferencia entre matriz asociativa, mapa, diccionario y tabla hash. Aunque todos estos se usan para contener datos de pares clave-valor, todavía hay una diferencia.

  1. un array asociativa es un concepto de estructura de datos que contiene los datos en pares (clave, valor). También se conoce como tipo de datos abstracto, al igual que mapas y diccionarios. Aquí los índices son cadenas, no números enteros. Hay diferentes formas de implementar un array asociativa; la tabla hash es una de ellas.
  2. El diccionario también contiene datos en pares (clave, valor) igual que la matriz asociativa. Pero, sus índices son números enteros.
  3. El mapa también tiene datos en pares clave-valor. Recuerda el orden de inserción original de la llave.
  4. Una tabla hash consiste en organizar datos en la memoria utilizando el método hash. Es una de las formas de simular un array asociativa.

Crear matriz asociativa de JavaScript usando objetos

// first way to create associative array
const person = [];
person['firstname'] = 'Mehvish';
person['lastname'] = 'Ashiq';
person['age'] = 30;
person['city'] = 'Multan';
person['email'] = 'delfstack@example.com';

// second way to create associative array
const person = {
  firstname: 'Mehvish',
  lastname: 'Ashiq',
  age: 30,
  city: 'Multan',
  email: 'delfstack@example.com'
};

Creamos un objeto JavaScript que funciona como un array asociativa en el código anterior. El firstname, lastname, age, city y email son claves (índices). Los valores son Mehvish, Ashiq, 30, Multan, delfstack@example.com.

Solo suponga que queremos agregar un nuevo par clave-valor como phone:12334567. Para eso, podemos usar la función Object.assign(). Copia el segundo objeto al final del primer objeto.

// Here the second object is {phone:12334567}
// Here the first object is person
Object.assign(person, {phone: 12334567});

Podemos acceder al valor de cada clave apuntando a las claves (índices). Recuerde, los índices son cadenas, no números. Por lo tanto, no puede acceder como person[0] aquí (puede usar person[0] si está usando diccionarios).

// to print in the browser
document.write(person.firstname);     // OUTPUT: Mehvish
document.write(person['firstname']);  // OUTPUT: Mehvish
document.write(person[0]);            // OUTPUT: undefined
// to print on console
console.log(person.firstname);  // OUTPUT: Mehvish
console.log(person[0]);         // OUTPUT: undefined

Podemos imprimir la matriz asociativa completa usando el bucle for.

// print complete associative array using for look
for (var key in person) {
  var value = person[key];
  document.write(value);
  document.write(' ');
}

Producción :

"[firstname: Mehvish]"
"[lastname: Ashiq]"
"[age: 30]"
"[city: Multan]"
"[email: delfstack@example.com]"
"[phone: 12334567]"

La forma más optimizada de imprimir todal array asociativa es el método Object.entries() que toma un parámetro del tipo de datos del objeto. Puede leer esto para conocer más funciones de Object.

// print complete associative array using for look
let completeAssociateArray = Object.entries(person);
console.log(completeAssociateArray);

Producción :

[["firstname", "Mehvish"], ["lastname", "Ashiq"], ["age", 30], ["city", "Multan"], ["email", "delfstack@example.com"], ["phone", 12334567]]

Cree un array asociativa de JavaScript usando la función Map()

// first way to create associative array using Map function
const person = new Map();
person.set('firstname', 'Mehvish');
person.set('lastname', 'Ashiq');
person.set('age', 30);
person.set('city', 'Multan');
person.set('email', 'delfstack@example.com');

// second way to create associative array using Map function
const person = new Map([
  ['firstname', 'Mehvish'], ['lastname', 'Ashiq'], ['age', 30],
  ['city', 'Multan'], ['email', 'delfstack@example.com']
]);

Usando el método get(key), podemos obtener un valor particular.

person.get('city');  // output is "Multan"

Mostrar pares clave-valor de arrays asociativas completas.

for (const [key, value] of person.entries()) {
  console.log(key + ' = ' + value)
}

Producción :

"firstname = Mehvish"
"lastname = Ashiq"
"age = 30"
"city = Multan"
"email = delfstack@example.com"

Imprime solo claves usando la función keys().

for (const key of person.keys()) {
  console.log(key)
}

Producción :

"firstname"
"lastname"
"age"
"city"
"email"

Obtenga valores solo usando la función values().

for (const value of person.values()) {
  console.log(value)
}

Producción :

"Mehvish"
"Ashiq"
30
"Multan"
"delfstack@example.com"

Podemos usar la tecla delete(key) para eliminar un elemento; devuelve true si se elimina con éxito. has(key) devuelve true si un elemento está asociado con la clave dada, mientras que clear() elimina todos los pares clave-valor.

Para una comprensión detallada, puede visitar esta página. Si está buscando una implementación de tabla hash, puede usar la función Map(), pero estamos usando un objeto JavaScript para implementar la tabla hash.

Use un objeto JavaScript para implementar una tabla hash

var ht = new HashTable({firstname: 'Mehvish', lastname: 'Ashiq', age: 30});

function HashTable(person) {
  this.size = 0;
  this.item = {};
  for (var p in person) {
    if (person.hasOwnProperty(p)) {
      this.item[p] = person[p];
      this.size++;
    }
  }

  this.set =
      function(key, value) {
    var previousItem = undefined;
    if (this.has(key)) {
      previousItem = this.item[key];
    } else {
      this.size++;
    }
    this.item[key] = value;
    return previousItem;
  }

      this.get =
          function(key) {
    return this.has(key) ? this.item[key] : undefined;
  }

          this.has = function(key) {
    return this.item.hasOwnProperty(key);
  }
}

Vamos a probarlo usando el siguiente código.

console.log(ht.size);
console.log(ht.get('firstname'));

Da los siguientes resultados.

3
"Mehvish"

El hasOwnProperty se usa para verificar si una clave pertenece al objeto item. En otras palabras, devuelve true si la propiedad dada pertenece directamente al objeto item.

El set, get y has son solo una forma imitada de las funciones de Object.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook