JavaScript 数据结构与算法(九)字典
字典
字典特点
- 字典存储的是键值对,主要特点是一一对应。
- 比如保存一个人的信息
- 数组形式:
[19,"Tom", 1.65]
,可通过下标值取出信息。 - 字典形式:
{"age": 19, "name": "Tom", "height": 165}
,可以通过 key
取出 value
。
- 此外,在字典中 key 是不能重复且无序的,而 Value 可以重复。
字典和映射的关系
- 有些编程语言中称这种映射关系为字典,如 Swift 中的
Dictonary
,Python 中的 dict
。 - 有些编程语言中称这种映射关系为 Map,比如 Java 中的
HashMap
和 TreeMap
等。
字典常见的操作
set(key,value)
向字典中添加新元素。remove(key)
通过使用键值来从字典中移除键值对应的数据值。has(key)
如果某个键值存在于这个字典中,则返回 true
,反之则返回 false
。get(key)
通过键值查找特定的数值并返回。clear()
将这个字典中的所有元素全部删除。size()
返回字典所包含元素的数量。与数组的 length
属性类似。keys()
将字典所包含的所有键名以数组形式返回。values()
将字典所包含的所有数值以数组形式返回。
字典封装
代码实现
export default class Map {
constructor() {
this.items = {};
}
has(key) {
return this.items.hasOwnProperty(key);
}
set(key, value) {
this.items[key] = value;
}
remove(key) {
if (!this.has(key)) return false;
delete this.items[key];
}
get(key) {
return this.has(key) ? this.items[key] : undefined;
}
keys() {
return Object.keys(this.items);
}
values() {
return Object.values(this.items);
}
size() {
return this.keys().length;
}
clear() {
this.items = {};
}
}
代码测试
const map = new Map();
map.set("name", "XPoet");
map.set("age", 18);
map.set("email", "i@xpoet.cn");
console.log(map);
console.log(map.has("name"));
console.log(map.has("address"));
map.remove("name");
console.log(map);
console.log(map.get("age"));
console.log(map.keys());
console.log(map.values());
console.log(map.size());