1. 程式人生 > >用js來實現那些數據結構11(字典)

用js來實現那些數據結構11(字典)

完成 str function .get 自己的 items 結構 AR pre

  我們這篇文章來說說Map這種數據結構如何用js來實現,其實它和集合(Set)極為類似,只不過Map是【鍵,值】的形式存儲元素,通過鍵來查詢值,Map用於保存具有映射關系的數據,Map裏保存著兩組數據:key和value,它們都可以是任何引用類型的數據,但key不能重復,而集合以【值,值】的形式存儲元素。字典也可以叫做映射。在ES6中同樣新增了Map這種數據結構。我們今天要實現的Map跟前面所實現的Set是十分相似的。只不過在對應的映射關系時會有些修改。

  那麽這篇文章我們快速的完成Map類的相關代碼:

  

function Map () {
    var items = {};

    
this.has = function (key) { return key in items; } this.set = function (key,value) { items[key] = value; } this.delete = function (key) { if(this.has(key)) { delete items[key]; return true; } return false; }
this.get = function (key) { return this.has(key) ? items[key] : undefined; } this.values = function () { var values = []; for(var k in items) { if(this.has(k)) { values.push(items[k]) } } return values; }
this.keys = function () { return Object.keys(items); } this.getItems = function () { return items; } this.clear = function() { items = {}; } this.size = function () { return Object.keys(items).length; } } var map = new Map(); map.set("zak","fat"); map.set("lily","thin"); map.set("david","big"); map.set("jams","small"); console.log(map.has("jams"));//true console.log(map.has("zaking"));//false console.log(map.size());//4 console.log(map.keys());//["zak", "lily", "david", "jams"] console.log(map.values());//["fat", "thin", "big", "small"] console.log(map.get("zak"));//fat map.delete("zak"); console.log(map.has("zak"));//false console.log(map.getItems());//{lily: "thin", david: "big", jams: "small"}

  這樣我們就實現了自己的Map類。

  ES6中的Map類,小夥伴們也可以用上面的測試方式來測試ES6原生Map,跟ES6原生的Set堪比兄弟結構。所以這裏也不再多說。大家最好自己去敲一遍代碼。相信小夥伴們一起學到這裏的話,肯定對數據結構不在陌生。其實數據結構的面紗並不神秘。

  這一篇代碼著實不多,但是對下面要講的散列表(hashMap)又十分必要。所以就單獨拆出來了一章。獨立的簡單說明了一番。

  除了後面要講的散列表外,還剩下兩個數據結構要講講,那就是樹和圖, 其中還會加入一些相關算法的介紹和說明。

  然後,hashMap個人覺得十分重要,是一種存儲元素及快速查找元素十分便捷一種數據結構。這裏不多說。下一篇會詳細的講解hashMap。

  最後,由於本人水平有限,能力與大神仍相差甚遠,若有錯誤或不明之處,還望大家不吝賜教指正。非常感謝!

用js來實現那些數據結構11(字典)