算法随笔-数据结构(字典)
本文主要介绍数据结构中字典的主要特点、JS的对象(字典)及ES6 Map的应用。供自己以后查漏补缺,也欢迎同道朋友交流学习。
引言
字典这个词大家一定不陌生,小时候不认识的字都要查字典,现在很多都是电子字典了,通过索引或者关键词搜索,查询到你想要的信息。那意味着字典就是存储、检索和管理信息的一种工具。
而对于前端来说,学习字典这一数据结构,有助于我们后续理解哈希表、二叉树有一定的帮助。
对 JS 来说,我们平时写的对象 Object 就是个字典,可以存储字符串、布尔值、数字、数组、对象等各种数据。但对象有个问题,存储的键(Key)都是字符串类型或者会转换成字符串类型。
后面 ES6 给我们一个新的数据结构做字典,就是 Map,后面我们也会着重讲下 Map 的各种使用。
字典的主要特点
字典是键值对存储的数据结构,它具有如下特点:
- 检索非常快:根据索引的key,可以快速找到其对应的value,一般来说,时间复杂度是
O(1)。 - 键值对不重复:字典的键值对是唯一的,
不允许重复。 - 任意类型:字典的键和值可以是任意类型,包括对象、数组、函数等。
- 无序性:字典中的存储通常是
无序的。 - 灵活性:字典允许在运行时添加、修改或删除键值对。
JS的对象(字典)
JS 中的对象字面量是创建字典的一种方式。
let dictionary = {
key1: "value1",
key2: "value2"
};
// 访问字典中的值
console.log(dictionary.key1); // 输出: value1
console.log(dictionary["key2"]); // 输出: value2
// 添加或修改 直接使用赋值即可
dictionary.newKey = "newValue"; // 添加新的键值对
dictionary.key1 = "updatedValue"; // 更新键1的值
// 删除键
delete dictionary.key2; // 删除键2
// 遍历用 for...in 循环
for (let key in dictionary) {
console.log(key + ': ' + dictionary[key]);
}
// 获取所有的键、值、键值对
Object.keys(dictionary); // ["key1", "key2"]
Object.values(dictionary); // ["value1", "value2"]
Object.entries(dictionary); // [["key1", "value1"], ["key2", "value2"]]
Map的应用
Map 是 ES6 引入的一种新的数据结构,它存储键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
let map = new Map();
// 添加元素
map.set(key, value);
// 获取元素
const value = map.get(key);
// 检查 Map 中是否存在键
const hasKey = map.has(key);
// 删除元素
map.delete(key);
// 遍历 Map*
map.forEach((value, key) => {
console.log(key, value);
});