ES6的Set结构

64 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天juejin.cn/post/712312…

Set数据结构

1、什么是Set? 解答:它自己就是一种数据类型。它类似数组(但它不是伪数组),它的成员都是唯一的,没有重复的值。也是以索引值方式存值,长度是size。

set也具有iterator接口

如果有这个值,再往里添加是添加不进去的。添加Set就是为了弥补数组的不足,就是没有重复的值。

创建方法:通过内置的构造函数,直接new Set()就可以创造出来,他们神也是一种对象,只不过是对象的一种特殊形式。

可以在创建时就添加数据,也可以在创建完之后再添加数据。()里的参数一般情况下都是个数组,但是只要具有iterator接口的其他数据结构也可以写在这里面

2、作用

  1. 数组去重
  2. 并集、交集、差集

...就是把具有iterator接口的对象变成逗号分隔的参数序列。

Array.from()就是把具有iterator接口的对象转为真正的数组

在Set结构中,如果有两个NaN,也只会保留一个,所以说明在Set结构里,NaN=NaN。

Set实例的属性和方法

  • Set.prototype.constructor:构造函数,默认就是Set函数。
  • Set.prototype.size:返回Set实例的成员总数。(也就是Set元素的总长度,相当于数组里的length)

以下方法绑定在Set原型上,所以通过Set创建出来的Set结构就可以继承这些方法。

  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。正因为它的而返回值是Set结构本身,可以做链式操作。
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。value是这个值本身,不是索引。
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  • Set.prototype.clear():清除所有成员,没有返回值。

什么时候用set?

答:就是你这块可能用到数组的时候,并且没有重复值的时候,就可以选择用Set。

Array.from方法可以将 Set 结构转为数组。

遍历操作(只有通过遍历才能把Set里的值拿出来)

在Set结构里,键名和键值是同一个东西,就是Set结构种的值。

Set 结构的实例有四个遍历方法,可以用于遍历成员。

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员 for...of后面是一个对象的话,它就会默认调用values方法

遍历的应用

扩展运算符...

set结构可以间接实用map和filter方法

set实现并集、交集和差集。

WeakSet了解一下 创建方式: let ws=new weakSet(对象) 与Set的区别:

  1. WeakSet里面的数据只能是对象
  2. WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
  3. WeakSet不可以被遍历

基本数据类型,全局定义的变量。对象所有的引用都被使用完了之后才销毁,才会被回收。但是在weakSet()里的对象是弱引用 ,垃圾回收机制不考虑WeakSet对该对象的引用。