返回
数据结构指南:剖析ES6 Set、Map、WeakSet和WeakMap
前端
2023-10-09 03:40:15
Set:无重复元素的集合
Set 是一种无序的集合,它包含唯一且不可重复的值。Set 中的值可以是任何类型,包括对象。
1. 创建Set
// 创建一个空的Set
const set = new Set();
// 向Set中添加元素
set.add('a');
set.add('b');
set.add('c');
// 查看Set中元素的个数
console.log(set.size); // 输出:3
// 检查Set中是否存在某个元素
console.log(set.has('b')); // 输出:true
2. 遍历Set
// 使用forEach循环遍历Set中的元素
set.forEach((value, key) => {
console.log(value); // 输出:a、b、c
});
// 使用for...of循环遍历Set中的元素
for (const value of set) {
console.log(value); // 输出:a、b、c
}
3. Set的应用场景
- 检查元素的唯一性:Set可以用来检查元素是否唯一,这在去重操作中非常有用。
- 集合运算:Set可以用来进行集合运算,如并集、交集和差集。
- 存储唯一值:Set可以用来存储唯一值,如用户ID、商品ID等。
Map:键值对的集合
Map是一种有序的键值对集合,它可以将任何类型的值与任何类型的值相关联。
1. 创建Map
// 创建一个空的Map
const map = new Map();
// 向Map中添加键值对
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
// 查看Map中元素的个数
console.log(map.size); // 输出:3
// 检查Map中是否存在某个键
console.log(map.has('b')); // 输出:true
2. 遍历Map
// 使用forEach循环遍历Map中的键值对
map.forEach((value, key) => {
console.log(key, value); // 输出:a 1、b 2、c 3
});
// 使用for...of循环遍历Map中的键值对
for (const [key, value] of map) {
console.log(key, value); // 输出:a 1、b 2、c 3
}
3. Map的应用场景
- 存储键值对:Map可以用来存储键值对,如用户名和密码、商品ID和商品名称等。
- 对象的扩展:Map可以用来扩展对象,为对象添加新的属性和方法。
- 缓存数据:Map可以用来缓存数据,提高应用程序的性能。
WeakSet:无重复元素的弱引用集合
WeakSet是一种无序的弱引用集合,它包含唯一且不可重复的值。WeakSet中的值只能是对象,而不能是其他类型的值。
1. 创建WeakSet
// 创建一个空的WeakSet
const weakSet = new WeakSet();
// 向WeakSet中添加元素
weakSet.add({a: 1});
weakSet.add({b: 2});
weakSet.add({c: 3});
// 查看WeakSet中元素的个数
console.log(weakSet.size); // 输出:3
// 检查WeakSet中是否存在某个元素
console.log(weakSet.has({b: 2})); // 输出:true
2. 遍历WeakSet
// WeakSet中的元素无法直接遍历
3. WeakSet的应用场景
- 存储弱引用对象:WeakSet可以用来存储弱引用对象,当对象被垃圾回收后,WeakSet中的引用也会被自动删除。
- 循环检测:WeakSet可以用来检测循环引用,防止内存泄漏。
WeakMap:键值对的弱引用集合
WeakMap是一种有序的键值对弱引用集合,它可以将任何类型的值与任何类型的值相关联。WeakMap中的键只能是对象,而不能是其他类型的值。
1. 创建WeakMap
// 创建一个空的WeakMap
const weakMap = new WeakMap();
// 向WeakMap中添加键值对
weakMap.set({a: 1}, 'a');
weakMap.set({b: 2}, 'b');
weakMap.set({c: 3}, 'c');
// 查看WeakMap中元素的个数
console.log(weakMap.size); // 输出:3
// 检查WeakMap中是否存在某个键
console.log(weakMap.has({b: 2})); // 输出:true
2. 遍历WeakMap
// WeakMap中的元素无法直接遍历
3. WeakMap的应用场景
- 存储弱引用对象:WeakMap可以用来存储弱引用对象,当对象被垃圾回收后,WeakMap中的引用也会被自动删除。
- 私有数据:WeakMap可以用来存储私有数据,这些数据只能通过WeakMap的键来访问。