现代JS学习笔记:Set集合
Posted by Mars . Modified at
学习内容:《现代JavaScript教程》
9 Set:集合
9.1 什么是Set
Set 是一个特殊的类型集合 —— “值的集合”(没有键),它的每一个值只能出现一次。
9.2 Set的特点
每个元素只可能在同一个Set里出现一次。
使用Set比每次调用arr.find()查找对比更迅速。Set 内部对唯一性检查进行了更好的优化。
重复使用同一个值调用 set.add(value) 并不会发生什么改变。这就是 Set 里面的每一个值只出现一次的原因。
9.3 Set的方法
- new Set(iterable) —— 创建一个 set,如果提供了一个 iterable 对象(通常是数组),将会从数组里面复制值到 set 中。 比如a是一个数组,则可以直接使用new Set(a)创建Set。
- set.add(value) —— 添加一个值,返回 set 本身
- set.delete(value) —— 删除值,如果 value 在这个方法调用的时候存在则返回 true ,否则返回 false。
- set.has(value) —— 如果 value 在 set 中,返回 true,否则返回 false。
- set.clear() —— 清空 set。
- set.size —— 返回元素个数。
9.4 Set的遍历
可以使用for…of遍历Set数据。
与Map一样,Map 中用于迭代的方法在 Set 中也同样支持:
- set.keys() —— 遍历并返回所有的值(returns an iterable object for values),
- set.values() —— 与 set.keys() 作用相同,这是为了兼容 Map,
- set.entries() —— 遍历并返回所有的实体(returns an iterable object for entries)[value, value],它的存在也是为了兼容 Map。
在 Map 和 Set 中迭代总是按照值插入的顺序进行的,所以我们不能说这些集合是无序的,但是我们不能对元素进行重新排序,也不能直接按其编号来获取元素。
也可以使用如同数组的forEach方法,传入一个函数,对Set对象进行遍历。
9.5 WeakSet
WeakSet 的表现类似 WeakMap:
- 与 Set 类似,可以保证weakSet内部没有重复的元素,但是我们只能向 WeakSet 添加对象(而不能是其他原始类型值);
- 对象只有在其它某个(些)地方能被访问的时候,才能留在 set 中;
- 跟 Set 一样,WeakSet 支持 add,has 和 delete 方法,但不支持 size 和 keys(),并且不可迭代。