在演算法中,尤其是有關陣列的演算法中,雜湊表的使用可以很好的解決問題,所以這篇文章會記錄一些有關js實現雜湊表並給出解決實際問題的例子。
說明: 這篇部落格所寫並不是真正意義的雜湊表,只是與雜湊表的使用有相似之處。
屬性的列舉:
var person =;輸出:for (var prop in
person)

即對於物件而言,我們可以使用for in來列舉物件的屬性。
屬性的刪除:
var person =;物件的屬性可以通過 delete 來刪除,並且會有乙個返回值。 如下:var ifremove =delete person.name;
for (var prop in
person)
console.log(ifremove);
注意: 一般只有物件的屬性才可以刪除,而變數是不能刪除的,如:
var x = 1這時列印台輸出false,因為變數是不可被刪除的。; console.log(delete x);
檢測屬性是否存在:
var person =;前者返回true,後者返回false。 即我們可以使用in來確定乙個物件是否含有該屬性。console.log(
"age"in
person);
console.log(
"someother
"in person);
屬性的新增:
var person =;屬性的新增非常簡單,如上所示,最終列印出來的物件是包含 school 屬性的。person[
"school
"] = "
xjtu";
console.log(person);
下面是通過建構函式得到乙個雜湊表,在使用時只需例項化即可,且下面的功能較為豐富,在實際問題中,我們可以選擇性的使用 。
//問題:給定乙個整型的陣列(無序),找出其中的兩個數使得其和為某個指定的值,並返回這兩個數的下標(陣列下標從0開始),假設陣列元素的值各不相同。建立建構函式hashtable
function hashtable() ;
//新增關鍵字,無返回值
this.add =function (key, value)
//如果之前不存在,賦值; 如果之前存在,覆蓋。
res[key] =value;
};//刪除關鍵字, 如果雜湊表中包含key,並且delete返回true則刪除,並使得size減1
this.remove =function (key)
};//雜湊表中是否包含key,返回乙個布林值
this.containkey =function (key) ;
//雜湊表中是否包含value,返回乙個布林值
this.containvalue =function (value)
}return
false
; };
//根據鍵獲取value,如果不存在就返回null
this.getvalue =function (key) ;
//獲取雜湊表中的所有value, 返回乙個陣列
this.getallvalues =function ()
return
values;
};//根據值獲取雜湊表中的key,如果不存在就返回null
this.getkey =function (value)
}//遍歷結束沒有return,就返回null
return
null
; };
//獲取雜湊表中所有的key,返回乙個陣列
this.getallkeys =function ()
return
keys;
};//獲取雜湊表中記錄的條數,返回乙個數值
this.getsize =function () ;
//清空雜湊表,無返回值
this.clear =function () ;};}
實現如下:
"en在實際的使用過程中,我們可以先寫出主要的功能,然後有需要再新增。">
模擬實現雜湊桶,並封裝雜湊桶模擬實現map
雜湊桶結構 乙個陣列,每個元素都是乙個單鏈表結點 開雜湊 閉雜湊只用陣列 map 用仿函式和雜湊函式來封裝雜湊桶。仿函式是為了計算出元素的值 為什麼要仿函式計算 後序可以封裝set,所以無論是map還是set,存的值都是k v結構,set存了k k,也就是兩個一樣的值 雜湊函式用了模板特化,為了能夠...
資料結構 雜湊表及其模擬實現
直接定址法 hashfunc date a date b a,b為常數 從雜湊衝突的位置,找下乙個空餘位置插入元素。尋找方式有兩種,線性探測和二次探測。直接向後 1查詢。h i h0 i 2 或者h i h0 i 2 de需要的原因,此位置不可以插入元素,也不可設定為em 查詢時遇em就停止了,可能...
js 模擬實現EventBus
文章原文 eventbus 幾個常用方法如下 這裡用map 儲存 eventbus 的資料,map 的模擬實現 可以看 示例 如下 let eb new eventbus eb.on event1 test1 eb.emit event1 第一次 eb.off event1 test1 eb.emi...