SOURCE

function HashTable(){
    this.table = new Array(137);
    this.simpleHash = simpleHash;
    this.betterHash = betterHash;
    this.showDistro = showDistro;
    this.put = put;
    this.get = get;
}

function simpleHash(data){//每个字符的ASCII码相加,得到散列值,有碰撞风险
    var total = 0;
    for(var i = 0;i < data.length;i++){
        total += data.charCodeAt(i);
    }
    console.log('Hash value:' + data + '->' + total)
    return total % this.table.length;
}

function betterHash(string){//霍纳算法 求和时乘一个质数
    const H =37;
    var total = 0;
    for(var i = 0;i < string.length;i++){
        total += H * total + string.charCodeAt(i);
    }
    total = total % this.table.length;
    if(total < 0){
        total += this.table.length - 1;
    }
    return parseInt(total);
}

function put(key,date){
    var pos = this.betterHash(key);
    this.table[pos] = data;
}

function get(key){
    return this.table[this.betterHash[key]];
}

function showDistro(){
    var n = 0;
     for(var i = 0;i < this.table.length;i++){
         if(this.table[i] != undefined){
             console.log(i + ':' + this.table[i])
         }
     }
}

var pnumbers = new HashTable();
var name,number;
for(var i = 0;i < 3;i++){
    var name = prompt('Enter a name(space to quit:)');
    var number = prompt('Enter a number(space to quit:)');
    pnumbers.put(name,number);
}
name = '';
var a = prompt('Enter a name:(Enter quit to stop)');
while(a != 'quit'){
    name = a;
if(a == 'quit'){
    break;
}
console.log(name + '-- number is'  + pnumbers.get(name));
var a = prompt('Enter a name:(Enter quit to stop)');
}
console 命令行工具 X clear

                    
>
console