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}`);
})
结果图: