现代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(),并且不可迭代。
Keywords: JavaScript
previousPost nextPost
已经有 1000000 个小伙伴看完了这篇推文。