本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、Set
MDN:
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
常用方法
1.添加 add
const set = new Set();
set.add(1);
set.add(100);
set.add(50);
set.add(1);
set.add({});
set.add({});
console.log(set) // { 1, 100, 50, {}, {} }
在内存中对象保存的形式是内存地址,两个对象的内存地址不同
2.删除 delete
const set = new Set();
set.add(1);
set.add(100);
set.add(50);
set.delete(100)
console.log(set) // { 1,50}
3.判断元素是否存在 has
const set = new Set();
set.add(1);
set.add(100);
set.add(50);
console.log(set1.has(330)) //false
console.log(set1.has(100)) //true
4.获取元素个数 has
const set = new Set();
set.add(1);
set.add(100);
console.log(set.size) //2
5.清除所有元素 clear
const set = new Set();
set.add(1);
set.add(100);
set.clear()
6.遍历 forEach、for...of...
set.forEach((item) => {
console.log(item);
});
for(let i of set){
console.log(i)
}
使用场景
对数组去重
const arr = [22, 10, 3, 330, 1, 33];
const set1 = new Set(arr);
console.log(set1);
const newArr = Array.from(set1); //将set转换为数组
const newArr1 = [...set1]; //将set转换为数组
console.log(newArr, newArr1);
二、WeakSet
MDN:
WeakSet对象允许你将弱保持对象存储在一个集合中。
-
元素不可以重复
-
与Set的区别
- 只能存放对象类型
- 对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,GC可以对该对象进行回收
-
不可以遍历
三、Map
MDN:
Map对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。
存储映射关系,允许对象类型作为key值
常用方法
1.添加 set
const map = new Map();
const obj = { name: "lim" };
map.set(obj, "a");
map.set({}, "b");
console.log(map); // { { name: 'lim' } => 'a', {} => 'b' }
2.获取元素 get
const map = new Map();
const obj = { name: "lim" };
map.set(obj, "a");
map.set({}, "b");
console.log(map.get(obj)); //a
3.删除 delete
const map = new Map();
const obj = { name: "lim" };
map.set(obj, "a");
map.set({}, "b");
console.log(map);
map.delete(obj);
console.log(map);
4.获取元素的个数 size 5.判断元素是否存在 has 6.清除所有元素 clear 7.遍历 forEach、for...of..
map.forEach((item, key) => {
console.log(item, key);
});
for (let i of map) {
console.log(i);
}
四、WeakMap
MDN:
WeakMap()会创建一个WeakMap对象,该对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
-
以键值对存在
-
WeakMap 的key只能是对象
-
key对对象的引用是弱引用,如果没有其他引用对某个对象进行引用,GC可以对该对象进行回收
-
方法
- set 添加
- get 获取某个值
- has
- delete