美文网首页
es6入门Set数据结构详解

es6入门Set数据结构详解

作者: 偶余杭 | 来源:发表于2019-01-12 19:42 被阅读0次

    set

    定义:

    是一种新的数据结构,类似数组,其成员是唯一的,没有重复的值.

    Set 结构没有键名,只有键值(或者说键名和键值是同一个值).

    Set本身 是一个构造函数,用来生成set 数据结构

    Set数据结构的原型方法有:

    Set结构的实例有以下属性和方法:

    属性:

    Set.prototype.contructor:    Set的构造函数

    Set prototype.size:Set实例的成员总数

    操作方法:

    add(value) : 添加成员,返回Set结构本身

    delete(value): 删除成员,返回布尔值,表示是否删除

    has(value): 判断是否包含某成员,返回布尔值,表示结果

    clear(): 清除成员,没有返回值

    遍历方法:

    keys() : 返回键名的遍历器对象

    values():  返回键值的遍历器对象

    entries(): 返回键值对的遍历器对象

    forEach(): 使用回调函数遍历成员

    Set结构使用:

    1、生成Set数据结构

    Set构造函数的参数可以是一个数组(或者具有 iterable 接口的其他数据结构)

    (1)生成空的数据结构

    const s = new Set()

    打印结果:

    可以看到Set结构有一些方法可以调用,类似数组。上述就是一个Set构造函数的实例。

    (2)接受一个数组作为参数(初始化)

    const s = new Set([1,2,3])

    打印结果:

    经过初始化,Set有了初始化的成员,可以解构成一个数组。

    注意,如果用来初始化的参数中有重复的值,Set会将它们去重:

    打印结果:

    故此,可以使用Set来给数组去重

    打印结果:

    类似的,也可以使用Set给字符串去重

    打印结果:

    2、在Set数据结构增加成员

    s,add(value)

    打印结果:

    add方法每次添加一个成员,不会对添加的成员进行类型转换,可以链式添加成员

    当添加的值为String、Number、Boolean时,不可添加重复的成员,其判断成员是否唯一的算法类似于精确相等运算符(===)

    与“===”的区别:

    NaN === NaN 为true,而Set结构把重复添加的NaN 视为一个值:

    打印结果:

    故此undefined、null 也不可在Set结构中重复添加。

    由于两个对象永远不相等,所以可以在Set结构中重复添加同样的数组或者对象

    打印结果:

    3、在Set结构中删除成员和清除成员

    删除成员:

    s.delete(value)

    打印结果:

    注意,delete方法没有办法删除对象和数组成员,使用时需注意

    打印结果:

    清除所有成员:

    s.clear();

    打印结果:

    4、判断Set结构是否包含某成员

    s.has(value)

    打印结果:

    同样的,has方法也不能判断对象和数组成员是否在Set中

    5、取Set结构成员总数

    s.size

    6、获取Set结构的键值对

    获取键名:

    s.keys()

    打印结果:

    其返回的是一个编辑器对象。

    获取键值:

    s.values()

    打印结果:

    由于Set结构的键名和键值都一样,所以keys方法和values方法返回的结果是一样地

    返回键值对:

    s.entries()

    打印结果:

    可以看到Set结构的键名和键值时相等的。

    7、遍历Set结构

    Set结构和数组一样,默认是可以遍历的,其默认遍历函数为values()。所以使用for循环对Set进行遍历时,可以获取每个键值

    打印结果:

    故此,扩展运算符 “...”就可以运用在Set上了,因为扩展运算符是使用for循环对数据进行结构

    Set结构和数组一样,都有forEach函数,对每个成员用回调函数做一些操作,没有返回值。

    打印结果:

    forEach的回调函数有三个参数,分别是键值,键名,Set集合本身

    使用Set集合计算并集,交集和差集:

    打印结果:

    在遍历操作中改变Set结构的方法

    打印结果:



    WeakSet

    WeakSet有set大部分的特性,但是与Set有两个区别

    1、成员只能是对象(数组是特殊的对象)

    2、不可以被遍历,没有size属性,因为成员都是弱引用(不计入垃圾回收机制,垃圾回收机制自动回收该成员占用内存)

    使用WeakSet可以防止内存泄漏,方便内存回收。

    相关文章

      网友评论

          本文标题:es6入门Set数据结构详解

          本文链接:https://www.haomeiwen.com/subject/wyicdqtx.html