HashTable.prototype.hash = function(key) { let total = 0; for(let i = 0; i < key.length; i++) { total += key.charCodeAt(i); } const bucketIndex = total % this.numBuckets; return bucketIndex; }
const myHT = new HashTable(30); console.log(myHT.hash('Becca')); // 12
這邊來解釋一下 hash 這個方法的裡面在幹些什麼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
HashTable.prototype.hash = function(key) { let total = 0; for(let i = 0; i < key.length; i++) { // charCodeAt 會回傳以 UTF-16 編碼後的結果。 // 並將每一次 charCodeAt 編碼後的結果疊加到 total。 // 這樣疊加的方式,純粹就是這個範例決定以這種方式當作這個 Hash Table 的 hash 規則,有點像是加密的感覺,而 hash 的方式有 n 種,這個範例就選這種方式來 hash total += key.charCodeAt(i); } // 要用 % 來對 numBuckets 取餘數的原因是, // 經過上面疊加過後的 total 結果要落在 0 - (this.buckets.length - 1) 區間內, // 不然,來個超出陣列的範圍是要怎麼存進去 🙃 const bucketIndex = total % this.numBuckets;