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){
    let total = 0
    for(let i = 0 ;i<data.length;i++){
        total += data.charCodeAt(i) //获取Unicode 编码
    }
    return total % this.table.length
}
/**
 * 引入质数,均匀hash,避免碰撞
 */
function betterHash(data){
    let total = 0
    let H = 0
    for(let i = 0 ;i<data.length;i++){
        total += total* H + data.charCodeAt(i) //获取Unicode 编码
    }
    total = total % this.table.length
    if(total < 0){
        total += this.table[this.table.length-1]
    }
    return parseInt(total)
}
function put(data){
    let hash = this.betterHash(data)
    this.table[hash] = data
}
function showDistro(){
    for(let i =0 ;i<this.table.length;i++){
        if(this.table[i]!=undefined){
            console.log(i,this.table[i])
        }
    }
}

let someNames = ["David", "Jennifer", "Donnie", "Raymond","Cynthia", "Mike", "Clayton", "Danny", "Jonathan"]; 
let hTable = new HashTable(); 
for (let i = 0; i < someNames.length; ++i) {
        hTable.put(someNames[i]); 
} 
hTable.showDistro();
console 命令行工具 X clear

                    
>
console