🧑🎓 个人主页:《爱蹦跶的大A阿》
🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》
✨ 前言
ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更优雅和高效的存取与操作数据的方式。本文将全面解析Map和Set的用法及应用场景,助你提升JavaScript数据处理能力。
第一节:Map概述
Map是ES6新增的一种键值对集合,类似于Object。区别在于:
- Map的键可以是任意类型,Object的键只能是字符串或符号。
- Map的大小可以直接获取,Object则需手动计算。
- Map有更多方便的方法,如size、clear等。
Map提供了对键值对的存储与操作,键的顺序也得到保留。
第二节:创建和初始化Map
可以通过构造函数创建Map:
let map = new Map();
Map可以接受数组做为参数,进行初始化:
new Map([['key1', 'val1'],['key2', 'val2'],
]);
也可以链式调用set方法初始化:
new Map().set('a', 1).set('b', 2);
第三节:Map的基本操作
- set(key, val) 添加元素
- get(key) 通过键查找值
- has(key) 判断键是否存在
- delete(key) 通过键删除元素
- clear() 清空所有元素
Map使键值对的操作更简洁直观。后面将介绍Map的遍历等高级用法。
第四节:遍历Map
常用的Map遍历方式:
- keys() - 遍历键名
- values() - 遍历键值
- entries() - 遍历键值对
- forEach() - 遍历回调函数
示例:
let map = new Map([[1, 'a'], [2, 'b']]);for (let key of map.keys()) {// ...
}for (let value of map.values()) {// ...
}for (let [key, value] of map.entries()) {// ...
}map.forEach(function(value, key) {// ...
})
第五节:WeakMap
WeakMap与Map的区别:
- WeakMap只接受对象作为键名
- WeakMap的键名所指向的对象不计入GC ROOT
- WeakMap不可遍历
WeakMap使用场景:
- 作为对象的元数据储存
- 缓存数据
第六节:Set的概述
Set是一种包含唯一值的集合,可以高效地对值进行操作。
Set具有以下特点:
- 成员值唯一,没有重复值
- 值的顺序不重要,也不能索引
- 支持高效的查找、删除操作
第七节:创建和初始化Set
可以通过构造函数创建Set:
let set = new Set();
也可以传入数组或者iterable对象进行初始化:
new Set([1, 2, 3]);new Set('hello');
第八节:Set的基本操作
- add(value) 添加元素
- delete(value) 删除元素
- has(value) 检查是否存在
- clear() 清空所有元素
Set使得处理唯一值更简单。
第九节:遍历Set
- keys() 返回键名的迭代器
- values() 返回键值的迭代器
- entries() 返回键值对的迭代器
- forEach() 遍历回调函数
示例:
let set = new Set([1, 2]);for (let key of set.keys()) {// ...
}for (let value of set.values()) {// ...
}set.forEach(function(value) {// ...
})
第十节:WeakSet
WeakSet与Set的区别:
- 只接受对象作为成员
- 对象不计入垃圾回收机制中
- 不可遍历
使用场景:存储DOM节点,不会泄漏内存。
Map和Set大大提高了数据处理能力,了解其用法可以使代码更简洁优雅。
第十一节:Map的应用
- 作为对象的替代,当键需要非字符串时
const map = new Map();
map.set(obj, value);
- 存储键值对数据集合
- 映射关系表
- 频率表记录出现次数
- 缓存数据
第十二节:Set的应用
- 去重数组
const set = new Set(arr);
- 交集、并集、差集运算
- 删除数组重复值
[...new Set(arr)]
- 测试值是否存在于某集合
- 存储不重复数据,如Tags
Map和Set拓展了数据处理能力,在数据操作方面有很多实际应用,值得我们深入学习。
✨ 结语
- Map用于存储键值对,键可以是任意类型。
- Set用于存储唯一值,没有重复值。
- Map和Set都可以高效地增删查找。
- Map支持按插入顺序遍历,Set不保证顺序。
- WeakMap和WeakSet用于存储对对象的弱引用。
- Map和Set在处理数据时有许多应用场景。
要点:
- 理解Map与Object、Set与Array的区别
- 掌握各自的初始化、增删查API
- 合理运用Map或Set,不要滥用
- WeakMap和WeakSet用于特定场景
- 多在实际中练习 Map和Set的应用
Map和Set提供了更优雅高效的 JavaScript 数据处理能力,值得我们深入学习,并合理运用到实际项目中。
这就是本文的全部内容了。如果对Map和Set的使用还有任何疑问,欢迎在评论区留言讨论!