最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js 模擬實現(xiàn)類似c#下的hashtable的簡單功能代碼

 更新時間:2010年01月24日 14:30:12   作者:  
越來越感覺js對集合的處理沒有c#強(qiáng)大。比如在實際開發(fā)中,經(jīng)常用到在一維數(shù)組或者二維數(shù)組里取某一個滿足某些條件的項,通常的處理方式就是遍歷數(shù)組,對比條件,匹配就取出,然后結(jié)束循環(huán)。
如果在c#中,我們只要用hashtable或者dictionary根據(jù)key取value的特性,就可以很輕松地實現(xiàn)這個功能了。其實我們稍作處理,js也可以實現(xiàn)類似hashtable的功能。下面總結(jié)一下筆者開發(fā)中用到的實現(xiàn)方式,貼代碼為主。
1、實現(xiàn)思路:主要就是利用原型(prototype)的hasOwnProperty方法,確定對象中的項是該添加、移除還是取出某個匹配的項等。hasOwnProperty比遍歷數(shù)組取值靈巧快速的地方在于:至少從代碼上來看,它是O(1)復(fù)雜度的。
2、實現(xiàn)代碼
復(fù)制代碼 代碼如下:

// js哈希表
function HashTable() {
this.ObjArr = {};
this.Count = 0;
//添加
this.Add = function(key, value) {
if (this.ObjArr.hasOwnProperty(key)) {
return false; //如果鍵已經(jīng)存在,不添加
}
else {
this.ObjArr[key] = value;
this.Count++;
return true;
}
}
//是否包含某項
this.Contains = function(key) {
return this.ObjArr.hasOwnProperty(key);
}
//取某一項 其實等價于this.ObjArr[key]
this.GetValue = function(key) {
if (this.Contains(key)) {
return this.ObjArr[key];
}
else {
throw Error("Hashtable not cotains the key: " + String(key)); //腳本錯誤
//return;
}
}
//移除
this.Remove = function(key) {
if (this.Contains(key)) {
delete this.ObjArr[key];
this.Count--;
}
}
//清空
this.Clear = function() {
this.ObjArr = {}; this.Count = 0;
}
}

3、測試代碼
代碼
復(fù)制代碼 代碼如下:

//員工
function employee(id, userName) {
this.id = id;
this.userName = userName;
}
function test() {
var ht = new HashTable();
var tmpEmployee = null;
for (var i = 1; i < 6; i++) {
tmpEmployee = new employee(i, "Employee_" + i);
ht.Add(i, tmpEmployee);
}
for (var i = 1; i <= ht.Count; i++) {
alert(ht.GetValue(i).userName); //其實等價于ht.ObjArr[i].userName
//alert(ht.ObjArr[i].userName);
}
ht.Remove(1);
alert(ht.Contains(1)); //false
alert(ht.Contains(2)); //true
//alert(ht.GetValue(1)); //異常
var result = ht.GetValue(2);
if (result != null) {
alert("Employee Id:" + result.id + ";UserName:" + result.userName);
}
ht.Add(2, "這一個key已經(jīng)存在!"); //Add無效
//ht.Clear(); //清空
alert(ht.Count);
}

調(diào)用的時候很簡單,只要new一個hashtable對象,常見的功能就都有了。是不是很簡單?Enjoy it。
小結(jié):原型鏈(prototype鏈)和作用域鏈?zhǔn)莏s的兩個最核心的部分。學(xué)懂并悟透它們,許多復(fù)雜問題都會迎刃而解;好好利用它們的特性,我們可以輕松實現(xiàn)非常靈活高效的功能。

相關(guān)文章

  • 淺談JavaScript find 方法不支持IE的問題

    淺談JavaScript find 方法不支持IE的問題

    下面小編就為大家?guī)硪黄獪\談JavaScript find 方法不支持IE的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JS實現(xiàn)li標(biāo)簽的刪除

    JS實現(xiàn)li標(biāo)簽的刪除

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)li標(biāo)簽的刪除,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • JavaScript canvas繪制圓弧與圓形

    JavaScript canvas繪制圓弧與圓形

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas繪制圓弧與圓形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • JavaScript實現(xiàn)下拉列表效果

    JavaScript實現(xiàn)下拉列表效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)下拉列表效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 使用InstantClick.js讓頁面提前加載200ms

    使用InstantClick.js讓頁面提前加載200ms

    本篇文章主要介紹了使用InstantClick.js讓頁面提前加載200ms,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Openlayers繪制地圖標(biāo)注

    Openlayers繪制地圖標(biāo)注

    這篇文章主要為大家詳細(xì)介紹了Openlayers繪制地圖標(biāo)注,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回

    ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回

    AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù),通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實現(xiàn)異步更新,本篇文章給大家介紹ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回,感興趣的朋友一起來學(xué)習(xí)
    2015-08-08
  • 網(wǎng)頁緩存文件批量改名工具

    網(wǎng)頁緩存文件批量改名工具

    網(wǎng)頁緩存文件批量改名工具...
    2006-10-10
  • JavaScript新增樣式規(guī)則(推薦)

    JavaScript新增樣式規(guī)則(推薦)

    這篇文章主要介紹了JavaScript新增樣式規(guī)則(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • uniapp 仿微信的右邊下拉選擇彈出框的實現(xiàn)代碼

    uniapp 仿微信的右邊下拉選擇彈出框的實現(xiàn)代碼

    這篇文章主要介紹了uniapp 仿微信的右邊下拉選擇彈出框的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

汝南县| 新宾| 游戏| 菏泽市| 毕节市| 孝义市| 昆山市| 左权县| 交口县| 定边县| 小金县| 十堰市| 宁武县| 册亨县| 哈尔滨市| 黎城县| 卓尼县| 永平县| 封开县| 新安县| 商南县| 常宁市| 子洲县| 文登市| 汉源县| 太仓市| 渑池县| 綦江县| 勃利县| 沂源县| 贺兰县| 长兴县| 梁河县| 和硕县| 平湖市| 罗田县| 昆明市| 新营市| 五寨县| 乌兰察布市| 黔东|