所以我已經能夠創建一個似乎可以正常作業的集合函式。當我嘗試創建一個“get”函式來搜索作為引數傳入的“key”傳遞的哈希表時,問題就出現了。
散列函式采用“字串”和“大小”引數,而不是像我試圖找出它的所有示例一樣的“鍵”。這是我得到的散列函式......
function hashCode(string, size){
let hash = 0;
if (string.length == 0) return hash;
for (let i = 0; i < string.length; i ) {
const letter = string.charCodeAt(i);
hash = ((hash << 5) - hash) letter;
hash = hash & hash; // Convert to 32bit integer
}
return Math.abs(hash) % size ;
}
這是我撰寫的“set”“HashTable”類函式和“set”函式...
function HashTable() {
this.SIZE = 16;
this.storage = new Array(this.SIZE);
}
// stores a value in the storage array
HashTable.prototype.set = function(key, value) {
let index = hashCode(value, 16);
if (!this.storage[index]) {
this.storage[index] = [];
}
this.storage[index][key] = value
};
我嘗試了幾種不同的方法來使 'get' 函式起作用。我嘗試遍歷陣列并使用 .hasOwnProperty 方法,目前嘗試僅在回圈中使用點表示法來查找屬性(如下所示)。我似乎無法讓它與我列出的方法一起作業,并且無法想出任何其他方法來在陣列中查找鍵/值對,而無法從散列函式中獲取索引。
這是我正在研究的“獲取”方法......
HashTable.prototype.get = function(key) {
this.storage.forEach((kvpair) => {
if (kvpair.key) {
return kvpair.key
}
})
};
當我像這樣創建類的新實體時......
let table = new HashTable;
并運行“設定”功能...
table.set('key','value');
和 console.log 'table' 我明白了...
HashTable {SIZE: 16, storage: [ , [ key: 'value' ], , , , , , , , , , , , , , ] }
當我嘗試運行我的“get”方法時......
table.get('key')
未定義被記錄到控制臺...
我只是不確定如何在沒有索引的情況下使這個“get”函式作業......我顯然沒有用我的回圈和點符號正確檢索值......
任何提示、技巧、想法、提示或幫助將不勝感激!
uj5u.com熱心網友回復:
問題是你的get方法沒有return宣告。確實,傳遞給的回呼forEach有一個return陳述句,但它定義了回呼的回傳值,而不是get方法的回傳值。
此外,在forEach回呼中回傳一個值是無用的:回傳的值無處可去。forEach不做任何事情。
相反,我建議使用find:
HashTable.prototype.get = function(key) {
return this.storage.find(kvpair => kvpair.key)?.key;
};
這也將迭代鍵/值對,但find旨在一旦回呼回傳真值就停止迭代。既然你想要key真實,那么kvpair.key在回呼中回傳就足夠了。然后find將回傳kvpair這key是真的。然后它仍然是再次搶占key財產。
該?.運營商將確保,如果關鍵是沒有找到,并且find將回傳undefined,這不會發生錯誤,但是undefined將被退回,而不是訪問一個屬性undefined。
uj5u.com熱心網友回復:
我稍微改變了你的 get 函式:
HashTable.prototype.get = function(key) {
var value = null
this.storage.forEach((kvpair) => {
if (kvpair.key) {
value = kvpair.key;
}
})
return value;
};
我不知道為什么這行得通,而您的代碼卻沒有...
如果有人可以解釋原因,謝謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383241.html
標籤:javascript 数组 目的 哈希表 哈希码
上一篇:從陣列和多維陣列創建JSON物件
