class HashTable {
constructor(size){
this.data = new Array(size);
}
_hash(key) {
let hash = 0;
for (let i =0; i < key.length; i++){
hash = (hash + key.charCodeAt(i) * i) % this.data.length
}
return hash;
}
set(key, value){
let hash = this._hash(key)
if(!this.data[hash]){
this.data[hash] =[]
}
for(let i = 0; i<this.data[hash].length; i++){
if(this.data[hash][i][0] === key){
this.data[hash].pop()
}
}
this.data[hash].push([key,value])
return this.data
}
get(key){
let hash = this._hash(key)
if(!this.data[hash]){
return null
}
for(let i = 0; i<this.data[hash].length; i++){
if(this.data[hash][i][0] === key){
return this.data[hash][i][1]
}
}
}
keys(){
const currentKeys = []
for(let i = 0; i<this.data.length; i++){
if(this.data[i]){
for(let j = 0; j<this.data[i].length; j++){
currentKeys.push(this.data[i][j][0])
}
}
}
return currentKeys
}
values(){
const currentKeys = []
for(let i = 0; i<this.data.length; i++){
if(this.data[i]){
for(let j = 0; j<this.data[i].length; j++){
currentKeys.push(this.data[i][j][1])
}
}
}
return currentKeys
}
}
const myHashTable = new HashTable(50);
myHashTable.set('grapes', 10000)
myHashTable.set('Grapes', 200)
console.log(myHashTable._hash("Grapes"))
console.log(myHashTable.get('Grapes'))
console.log(myHashTable.set('apples', 9))
console.log(myHashTable.get('apples'))
console.log(myHashTable.keys())
console.log(myHashTable.values())