【ES6系列】Set数据结构

207 阅读3分钟

定义

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

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

因为Set是构造函数,所以需要用new关键字来生成实例,直接上代码。

let s = new Set() //此时,我们就生成了Set数据结构的实例“s“

接下来,我们往s身上添加成员信息。

方法一:add方法及add链式调用方法

s.add(1)

s.add(2)

console.log(s) ---{ 1 , 2 }

当然,我们也可以使用Set的链式调用方法来快速添加成员信息

s.add(1).add(2).add(3).add(4)

console.log(s) ----{ 1 , 2 , 3 , 4 }

方法二:在new Set()的时候,直接以数组的形式传入需要添加的成员信息

let s2 = new Set([1,2,3,4,5,])

console.log(s2) --- { 1 , 2 , 3 , 4 , 5}

特性

Set数据结构最重要的特性,就是成员都是唯一的,常见的数组去重,我们就可以使用Set数据结构来轻松完成。

现在有一个数组为[1,2,3,4,3,2,3,2,4,1,5],如何使用Set对该数组进行去重呢?

let s3 = new Set([1,2,3,4,3,2,3,2,4,1,5]) //传入数组的所有成员

console.log(s3) --- { 1 , 2 , 3 , 4 , 5} 只会保留唯一的成员

仔细观察,刚刚我们提到的是数组去重,但是打印出来发现s3并不是一个数组,那怎么办呢?这个时候,我们就可以调用数组的Array.from()方法或者es6的扩展运算符, 将s3转为数组。

再转为数组之前,我们直接让s3调用数组的push方法,看看会发生什么。。。

s3.push(6)

console.log(s3) --- Uncaught TypeError: s3.push is not a function ---果然不能直接调用数组身上的方法,没办法, 我们还是老实得进行数组转换吧

let s4 = Array.from(s3) // 通过数组的Array.from方法,将s3转为数组,并将转换后的结果赋值为s4

let s4 = [...s3] //或者使用es6的扩展运算符,也可以得到和Array.from方法一样的结果

console.log(s4) --- [1,2,3,4,5] //转换数组成功

现在再调用push方法试试

s4.push(6)

console.log(s4) --- [1,2,3,4,5,6] //可以成功调用数组的方法了

Set的其他方法

有添加,当然也会有删除。下面我们一起来看一下,如何删除Set结构中的成员信息呢?

delete方法:由Set的实例化对象直接调用,并传入需要删除的值,返回布尔值,表示是否删除成功

let s5 = new Set([1,2,3,4]) --- s5 { 1 , 2 , 3 , 4 }

s5.delete(3) //删除值为 3 的成员

console.log(s5.delete(3)) ---返回true,代表删除成功

console.log(s5) --- { 1 , 2 , 4 }

clear方法:由Set的实例化对象直接调用,表示清除所有成员,没有返回值

s5.clear()

console.log(s5) --- { size : 0 } 成员已经被清空咯

has方法:由Set的实例化对象直接调用,表示该值是否为 Set 的成员,返回一个布尔值

let s6 = new Set([1,2,3,4])

console.log(s6.has(2)) --- 很显然,s6中,包含值为2的成员,所以返回true

size属性:由Set的实例化对象直接调用,返回 set结构的成员总数

console.log(s6.size) --- 4

遍历方法:

这里就给大家介绍两种Set数据结构常见的遍历方法,forEach和for of

    const set = new Set ( [ 1,2,3,4,3,2,3,4,5] )
    
    ***   使用  forEach  ***
    
    set.forEach(element=>{
        console.log(element) // 1,2,3,4,5
    });
    
   ***    使用  for of  ***
   
    for(let item of set){
        console.log(item)  // 1,2,3,4,5
    }
    
    

可以看出,两种方法都可以很方便地输出每一个成员。

好了,关于Set数据结构的常用方法,就给大家分享到这儿了,再见。