摘要:字典是一種以鍵值對(duì)形式存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)就像電話號(hào)碼薄里的名字和電話號(hào)碼一樣要找一個(gè)電話時(shí)先找名字名字找到了緊挨著它的電話號(hào)碼也就找到了這里的鍵是指你用來查找的東西值是查找得到的結(jié)果的類就是以字典形式設(shè)計(jì)的本章將使用類本身的特性實(shí)現(xiàn)一個(gè)類
字典是一種以 鍵 - 值 對(duì)形式存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu), 就像電話號(hào)碼薄里的名字和電話號(hào)碼一樣. 要找一個(gè)電話時(shí), 先找名字, 名字找到了, 緊挨著它的電話號(hào)碼也就找到了. 這里的 鍵 是指你用來查找的東西, 值 是查找得到的結(jié)果.Dictionary類
JS的Object類就是以字典形式設(shè)計(jì)的. 本章將使用Object類本身的特性, 實(shí)現(xiàn)一個(gè)Dictionary類, 讓這種字典類型的對(duì)象使用起來更加簡(jiǎn)單. 你也可以只使用數(shù)組和對(duì)象來實(shí)現(xiàn)本章展示的方法, 但是定義一個(gè)Dictionary類更方便, 也更有意思. 比如, 使用()引用鍵就比使用[]簡(jiǎn)單. 當(dāng)然, 還有其他一些便利, 比如可以定義對(duì)整體進(jìn)行操作的方法, 舉個(gè)栗子, 顯示字典中所有的元素, 這樣就不必在主程序中循環(huán)去遍歷字典了.
Dictionary類是基礎(chǔ)是Array類, 而不是Object類. 本章稍后將提到, 我們想對(duì)字典中的鍵排序, 而JS中是不能對(duì)對(duì)象的屬性進(jìn)行排序的. 但是也不要忘記, JS中一切皆對(duì)象, 數(shù)組也是對(duì)象.
window.log = console.log.bind(console) class Dictionary { constructor() { this._datastore = []; } add(key, value) { this._datastore[key] = value; } find(key) { return this._datastore[key]; } remove(key) { delete this._datastore[key]; } showAll() { Object.keys(this._datastore).forEach(key => { log(`${key} ===>>> ${this._datastore[key]}`) }) } }; const pbook = new Dictionary(); pbook.add("作家1", "書1"); pbook.add("作家2", "書2"); pbook.add("作家3", "書3"); pbook.add("作家4", "書4"); pbook.showAll(); log("") pbook.remove("作家3"); pbook.showAll();
add()方法接受兩個(gè)參數(shù): 鍵和值. 鍵是值在字典中索引.
find()方法以鍵為參數(shù), 返回和其相關(guān)聯(lián)的值.
remove()方法用到了JS中的一個(gè)內(nèi)置函數(shù): delete.該函數(shù)是Object類的一部分, 使用對(duì)鍵的引用作為參數(shù). 該函數(shù)同時(shí)刪掉鍵和與其關(guān)聯(lián)的值.
showAll()方法顯示字典中所有的鍵值對(duì).
我們還可以定義一些在特定情況下用的輔助方法.
... count() { let n = 0; Object.keys(this._datastore).forEach(i => { n++ }); return n; } clear() { Object.keys(this._datastore).forEach(key => { delete this._datastore[key] }); } ...
比如, 要是能知道字典中的元素個(gè)數(shù)就好了, 那么就可以定義一個(gè)count()方法.
這里你可能就要問了, 既然_datastore是數(shù)組類型的話為什么不直接用length屬性呢? 這是因?yàn)楫?dāng)鍵的類型為字符串時(shí), length屬性就不管用了. eg:
const nums = []; nums[0] = 1; nums[1] = 2; log(nums.length); // 2 const book = []; book["a"] = 1; book["b"] = 2; log(book.length); // 0
以及清空字典clear(). 這里使用this._datastore = []也是可以的;
為Dictionary類添加排序功能字典的主要用途是通過鍵取值, 我們無需太關(guān)心數(shù)據(jù)在字典中的實(shí)際存儲(chǔ)順序. 然而, 很多人都希望看到一個(gè)有序的字典. 下面來看看如何讓前面的字典按順序顯示.
數(shù)組是可以排序的, eg:
const a = []; a[0] = "m"; a[1] = "d"; log(a); // m d a.sort(); log(a); // d m
但是上面的這種做法是對(duì)字符串作為鍵的字典無效的, 程序會(huì)沒有任何輸出. 這和我們前面定義count()方法時(shí)情況一致;
不過這也不是大問題. 用戶關(guān)心的是顯示字典的內(nèi)容時(shí), 結(jié)果是有序的. 可使用Object.keys()函數(shù)解決這個(gè)問題, 重新定義showAll()方法:
showAll() { Object.keys(this._datastore).sort().forEach(key => { log(`${key} ===>>> ${this._datastore[key]}`) }) }
和前面的區(qū)別是: 拿到_datastore的鍵后, 調(diào)用sort()方法對(duì)鍵重新排序.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98185.html
摘要:概述數(shù)據(jù)字典主要解決下拉框數(shù)據(jù)填充和數(shù)據(jù)表格轉(zhuǎn)義處理,一個(gè)數(shù)據(jù)字典可以多處使用。通過服務(wù)端異步請(qǐng)求加載數(shù)據(jù)列表。 概述 數(shù)據(jù)字典主要解決下拉框數(shù)據(jù)填充和數(shù)據(jù)表格轉(zhuǎn)義處理,一個(gè)數(shù)據(jù)字典可以多處使用。 1.多個(gè)頁面下拉框使用同樣的數(shù)據(jù),改一個(gè)地方需要把所有頁面都要修改 2.數(shù)據(jù)表格轉(zhuǎn)義代替自己手動(dòng)寫templet解析模板數(shù)據(jù)字典提供一個(gè)通用的處理方式,支持配置靜態(tài)數(shù)據(jù)字典和動(dòng)態(tài)數(shù)據(jù)...
摘要:概述數(shù)據(jù)字典主要解決下拉框數(shù)據(jù)填充和數(shù)據(jù)表格轉(zhuǎn)義處理,一個(gè)數(shù)據(jù)字典可以多處使用。通過服務(wù)端異步請(qǐng)求加載數(shù)據(jù)列表。 概述 數(shù)據(jù)字典主要解決下拉框數(shù)據(jù)填充和數(shù)據(jù)表格轉(zhuǎn)義處理,一個(gè)數(shù)據(jù)字典可以多處使用。 1.多個(gè)頁面下拉框使用同樣的數(shù)據(jù),改一個(gè)地方需要把所有頁面都要修改 2.數(shù)據(jù)表格轉(zhuǎn)義代替自己手動(dòng)寫templet解析模板數(shù)據(jù)字典提供一個(gè)通用的處理方式,支持配置靜態(tài)數(shù)據(jù)字典和動(dòng)態(tài)數(shù)據(jù)...
摘要:我經(jīng)常在業(yè)務(wù)代碼中把數(shù)據(jù)處理成這種字典的數(shù)據(jù)結(jié)構(gòu)獲取的方法哈希表在學(xué)習(xí)了類之后,我們會(huì)學(xué)習(xí)散列表,也就是哈希表。 《Javascript數(shù)據(jù)結(jié)構(gòu)和算法》筆記-「字典和散列表」 集合、字典、散列表存儲(chǔ)的都是「不重復(fù)」的數(shù)據(jù)結(jié)構(gòu) 集合:我們更關(guān)注每一個(gè)元素的值,并把其作為主要元素 字典:我們用[鍵,值]的形式來存儲(chǔ)數(shù)據(jù) 散列表: 跟字典類似,也會(huì)是用[鍵,值]的形式來存儲(chǔ)數(shù)據(jù) 但是「字...
摘要:作用通過鍵值對(duì)來存儲(chǔ)不重復(fù)的值的,與集合相比,集合是通過值值來存儲(chǔ)不重復(fù)的值字典所需功能跟據(jù)傳入的值向字典中添加元素通過移除字典中對(duì)應(yīng)的值通過某個(gè)鍵來判斷是否含有某個(gè)值通過給定的鍵查找到特定的值并返回將字典置為空獲取字典的容量獲取字典 作用 通過鍵值(key-value)對(duì)來存儲(chǔ)不重復(fù)的值的,與集合相比,集合是通過值值(value-value)來存儲(chǔ)不重復(fù)的值 字典所需功能 跟據(jù)傳入...
摘要:方法向字典中添加新元素。通過鍵值查找特定的數(shù)值并返回。將這個(gè)字典中的所有元素全部刪除。將字典所包含的所有數(shù)值以數(shù)組形式返回。 定義 通俗地說,字典就是鍵值對(duì)[鍵,值],是鍵到值的映射關(guān)系。 方法 set(key,value):向字典中添加新元素。 remove(key):通過使用鍵值來從字典中移除鍵值對(duì)應(yīng)的數(shù)據(jù)值。 has(key):如果某個(gè)鍵值存在于這個(gè)字典中,則返回true,反之...
摘要:刪除字典元素和字典刪除鍵為的條目刪除中所有的條目刪除整個(gè)字典刪除并返回鍵為的條目二字典相關(guān)函數(shù)工廠方法工廠函數(shù)被用來創(chuàng)建字典。與函數(shù)方法相似,如果字典中鍵存在,刪除并返回,如果鍵不存在,且沒有給出的值,引發(fā)異常。 Python字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型。一、創(chuàng)建字典(一)字典的增刪改查(1)字典的創(chuàng)建key:(不可變類型)數(shù)字、字...
閱讀 1342·2021-09-24 10:26
閱讀 3655·2021-09-06 15:02
閱讀 604·2019-08-30 14:18
閱讀 576·2019-08-30 12:44
閱讀 3119·2019-08-30 10:48
閱讀 1936·2019-08-29 13:09
閱讀 1993·2019-08-29 11:30
閱讀 2279·2019-08-26 13:36