js版數據結構_06 字典
本篇博客知識點:
- 什麼是字典
- 相關方法的實現
1. 什麼是字典
上一篇博客我們總結了集合,知道集合就是存放了一組互不重複的元素。字典和它相差不多,只不過集合裏面只是保存了值,而在這裏是以鍵值對的方式保存的
與集合的實現相同,這裏我們還是使用對象作爲字典結構的數據容器。
創建字典類:
class Dictionary {
constructor() {
this.table = {};
}
}
要實現的相關方法:
- set(key,value):向字典中添加新元素。如果 key 已經存在,那麼已存在的 value 會
被新的值覆蓋 - remove(key):通過使用鍵作爲參數來從字典中移除鍵值對應的數據值。
- hasKey(key):如果某個鍵值存在於該字典中,返回 true,否則返回 false。
- get(key):通過以鍵值作爲參數查找特定的數值並返回。
- clear():刪除該字典中的所有值。
- isEmpty():在 size 等於零的時候返回 true,否則返回 false。
- keys():將字典所包含的所有鍵名以數組形式返回。
- values():將字典所包含的所有數值以數組形式返回。
- keyValues():將字典中所有[鍵,值]對返回。
- forEach(callbackFn):迭代字典中所有的鍵值對。 callbackFn 有兩個參數: key 和
value。
2.相關方法的實現
ps:下面爲了保證輸入的鍵爲字符串,爲方便使用了空字符串的拼接
hasKey(key)
// 判該字典中是否有該鍵
hasKey(key) {
return this.table[key + ""] != null;
}
set(key, val)
// 加入或重置鍵值對
set(key, val) {
if (key != null && val != null) {
this.table[key + ""] = val;
return true;
} else {
return false;
}
}
remove(key)
// 刪除鍵值對
remove(key) {
if (this.hasKey(key + "")) {
delete this.table[key + ""];
return true;
} else {
return false;
}
}
get(key)
get(key) {
if (this.hasKey(key + "")) {
return this.table[key + ""];
} else {
return undefined;
}
}
keyValues()
// 返回字典中的所有value
keyValues() {
return Object.values(this.table);
}
keys()
// 返回字典中的所有key
keys() {
return Object.keys(this.table);
}
size()
size() {
return Object.keys(this.table).length;
}
isEmpty()
isEmpty() {
return this.size() === 0;
}
clear()
clear() {
this.table = {};
}
forEach(callback)
forEach(callback) {
const key = this.keys();
for (let i = 0; i < key.length; i++) {
let res = callback(key[i], this.table[key[i]]);
if (res === false) {
break;
}
}
}
部分測試代碼:
let dic = new Dictionary();
dic.set(1, "a");
dic.set(2, "b");
dic.set(3, "c");
dic.set(4, "d");
dic.set(5, "e");
console.log(dic.hasKey(1));
dic.remove(2);
console.log(dic.get(3));
console.log(dic.keyValues());
console.log(dic.keys());
dic.forEach((key, val) => {
console.log(`key:${key} val:${val}`);
})
結果圖: