JavaScript的字典通過Set進行了實現(xiàn)驯镊,關(guān)于Set的詳情請看MDN文檔柿顶。
以下是自己通過JavaScript簡單的實現(xiàn)
function Set(){
// 函數(shù)中的私有變量
var items = {};
// 判斷是否有某個屬性,使用的是in方法(可以包括繼承的屬性)翔怎,而不是使用的Object.hasOwnProperty()
this.has = function(key){
return key in items;
};
// 設(shè)置屬性和值
this.set = function(key, value){
items[key] = value;
};
// 獲取某個屬性對應(yīng)的值
this.get = function(key){
return this.has(key) ? items[key] : undefined;
};
// 刪除某個屬性配名,此時需要判斷items中是否有這個屬性鹉梨,有就刪除并返回true,沒有返回false
this.remove = function(key){
if(this.has(key)){
delete items[key];
return true;
}
return false;
};
// 獲取所有屬性的值序攘,返回的是一個數(shù)組
this.values = function(){
var values = [];
for (const key in items) {
// for in 循環(huán)會將items所繼承的屬性也遍歷到鸭限,為了防止得到遍歷的屬性,加入如下判斷進行過濾
if (this.has(key)) {
values.push(items[key])
}
}
return values;
};
// 獲取所有的屬性及其值
this.getItems = function(){
return items;
}
}
var dictionary = new Set();
dictionary.set('李四', 'lisi');
dictionary.set('王五', 'wangwu');
dictionary.get('王五') // "wangwu"
dictionary.get('李四') // "lisi"
dictionary.getItems() // {李四: "lisi", 王五: "wangwu"}
dictionary.values() // ["lisi", "wangwu"]
dictionary.remove('王五') // true
dictionary.values() // ["lisi"]