JavaScript數據結構之 —— 07數組字典和對象字典

字典是一種以鍵- 值對形式存儲數據的數據結構,就像電話號碼簿裏的名字和電話號碼一樣。要找一個電話時,先找名字,名字找到了,緊挨着它的電話號碼也就找到了。這裏的鍵是指你用來查找的東西,值是查找得到的結果。
與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;
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章