plementar la clase HashTable. Nuetra tabla hash, internamente, consta de un arreglo de buckets (slots, contenedores, o casilleros; es decir, posiciones posibles para almacenar la información), donde guardaremos datos en formato clave-valor (por ejemplo, {instructora: 'Ani'}). Para este ejercicio, la tabla debe tener 35 buckets (numBuckets = 35). (Luego de haber pasado todos los tests, a modo de ejercicio adicional, pueden modificar un poco la clase para que reciba la cantidad de buckets por parámetro al momento de ser instanciada.) La clase debe tener los siguientes métodos: - hash: función hasheadora que determina en qué bucket se almacenará un dato. Recibe un input alfabético, suma el código numérico de cada caracter del input (investigar el método charCodeAt de los strings) y calcula el módulo de ese número total por la cantidad de buckets; de esta manera determina la posición de la tabla en la que se almacenará el dato. - set: recibe el conjunto clave valor (como dos parámetros distintos), hashea la clave invocando al método hash, y almacena todo el conjunto en el bucket correcto. - get: recibe una clave por parámetro, y busca el valor que le corresponde en el bucket correcto de la tabla. - hasKey: recibe una clave por parámetro y consulta si ya hay algo almacenado en la tabla con esa clave (retorna un booleano).
class HashTable { constructor(numBuckets) { this.buckets = Array(numBuckets); } hash(key) { let total = 0; for (let i = 0; i < key.length; i++) { total += key.charCodeAt(i); } return total % this.buckets.length; } set(key, value) { let index = this.hash(key); if (!this.buckets[index]) this.buckets[index] = []; this.buckets[index].push([key, value]); return index; } get(key) { let index = this.hash(key); if (!this.buckets[index]) return null; for (let i = 0; i < this.buckets[index].length; i++) { if (this.buckets[index][i][0] === key) return this.buckets[index][i][1];