Set 集合
-
松散结构,没有key,只有value的集合,存储唯一的值,数据不能重复,不能排序, 插入删除速度快,可以得到集合中数据的长度,可以遍历,查找速度快,没有下标。
-
操作包括添加(
add
)、删除(delete
)、判断是否存在(has
)、清除所有数据(clear
),可以获取集合大小(size
),支持遍历(forEach
循环和for...of
循环)。 -
可用于数组去重和减少查找操作(减少查找” 操作可能指的是利用特定数据结构(如
Set
)来更高效地判断一个值是否存在于一个集合中,从而减少查找的时间复杂度。)// 1、去重 // 引用地址改变 var arr=[1,2,3,1,2,3,4,5,7,6,4,3,2,4,6,5,7]; var arr1=Array.from(new Set(arr)); console.log(arr1); console.log(arr1===arr); // 2、减少查找 var arr=[1,2,3,4]; console.log(arr.includes(2));//在数组中查找是否存在
-
Set本身也是迭代器
WeakSet
弱引用集合
-
存储对象的弱引用,当没有其他强引用指向这些对象时,垃圾回收机制可以回收这些对象所占的内存。
-
不能遍历,主要用于存储临时的对象引用,避免造成内存泄漏。
Map 映射
-
松散结构,以键值对形式存储数据,查找和添加删除速度快,不能排序,可以获取到数据存储的长度,key可以是任何类型
-
键可以是任何类型,操作包括设置键值对(
set
)、根据键获取值(get
)、删除键值对(delete
)、判断键是否存在(has
)、获取存储值的数量(size
),支持遍历(forEach
循环、解构遍历、遍历键和遍历值等)。 // 遍历map m.forEach((value,key)=>{ console.log(value,key); }) // 解构 for(let [key,value] of m){ console.log(key,value); } // 只遍历key for(var key of m.keys()){ console.log(key); } // 只遍历value for(var value of m.values()){ console.log(value); }
-
可以通过多种方式初始化,如直接设置键值对、使用数组形式的迭代器、从对象转换而来。
WeakMap
弱引用映射
-
键只能是引用类型,不能遍历。
-
同样用于存储临时的对象引用,避免内存泄漏。