字典是一種以鍵- 值對形式存儲數據的數據結構,就像電話號碼簿裏的名字和電話號碼一樣。要找一個電話時,先找名字,名字找到了,緊挨着它的電話號碼也就找到了。這裏的鍵是指你用來查找的東西,值是查找得到的結果。
與Set類相似,ECMAScript 6同樣包含了一個Map類的實現,即我們所說的字典。
字典和集合很相似,集合以[值,值]的形式存儲元素,字典則是以[鍵,值]的形式來存儲元素。字典也稱作映射。
在字典中key是無序的、不能重複的,而Value可以重複。
字典類常見的操作:
- set(key,value):向字典中添加新元素。
- remove(key):通過使用鍵值來從字典中移除鍵值對應的數據值。
- has(key):如果某個鍵值存在於這個字典中,則返回true,反之則返回false。
- get(key):通過鍵值查找特定的數值並返回。
- clear():將這個字典中的所有元素全部刪除。
- size():返回字典所包含元素的數量。與數組的length屬性類似。
- keys():將字典所包含的所有鍵名以數組形式返回。
- values():將字典所包含的所有數值以數組形式返回。
封裝字典(對象)
//封裝字典類
function Dictionary(){
//字典屬性
this.items = {}
//字典操作方法
//一.在字典中添加鍵值對
Dictionary.prototype.set = function(key, value){
this.items[key] = value
}
//二.判斷字典中是否有某個key
Dictionary.prototype.has = function(key){
return this.items.hasOwnProperty(key)
}
//三.從字典中移除元素
Dictionary.prototype.remove = function(key){
//1.判斷字典中是否有這個key
if(!this.has(key)) return false
//2.從字典中刪除key
delete this.items[key]
return true
}
//四.根據key獲取value
Dictionary.prototype.get = function(key){
return this.has(key) ? this.items[key] : undefined
}
//五.獲取所有keys
Dictionary.prototype.keys = function(){
return Object.keys(this.items)
}
//六.size方法
Dictionary.prototype.keys = function(){
return this.keys().length
}
//七.clear方法
Dictionary.prototype.clear = function(){
this.items = {}
}
//七.values方法
// 我們不能僅僅使用for-in語句來遍歷items對象的所有屬性,
//還需要使用has方法(驗證items對象是否包含某個屬性)
//因爲對象的原型也會包含對象的其他屬性
//(JavaScript基本的Object類中的屬性將會被繼承,
//並存在於當前對象中,而對於這個數據結構來說,我們並不需要它們)。
Dictionary.prototype.values = function(){
var values = {};
for (var k in items) {
if (this.has(k)) {
values.push(items[k]);
}
}
return values;
}
}
封裝字典(數組)
數組的字符串也可以作爲key,之前都沒注意,可見一切皆對象,數組也是對象。同時數組也繼承了對象原型上的方法。
//封裝字典類
function Dictionary(){
//字典屬性
this.items = []
//字典操作方法
//一.在字典中添加鍵值對
Dictionary.prototype.set = function(key, value){
this.items[key] = value
}
//二.判斷字典中是否有某個key
Dictionary.prototype.has = function(key){
return this.items.hasOwnProperty(key)
// 數組頁有這個方法
}
//三.從字典中移除元素
Dictionary.prototype.remove = function(key){
//1.判斷字典中是否有這個key
if(!this.has(key)) return false
//2.從字典中刪除key
delete this.items[key]
return true
}
//四.根據key獲取value
Dictionary.prototype.get = function(key){
return this.has(key) ? this.items[key] : undefined
}
//五.獲取所有keys
Dictionary.prototype.keys = function(){
return Object.keys(this.items)
}
//六.size方法
Dictionary.prototype.keys = function(){
return this.items.length
}
//七.clear方法
Dictionary.prototype.clear = function(){
this.items = []
}
//七.values方法
// 我們不能僅僅使用for-in語句來遍歷items對象的所有屬性,
//還需要使用has方法(驗證items對象是否包含某個屬性)
//因爲對象的原型也會包含對象的其他屬性
//(JavaScript基本的Object類中的屬性將會被繼承,
//並存在於當前對象中,而對於這個數據結構來說,我們並不需要它們)。
Dictionary.prototype.values = function(){
var values = {};
for (var k in items) {
if (this.has(k)) {
values.push(items[k]);
}
}
return values;
}
}