定义
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数据结构的常用方法,就给大家分享到这儿了,再见。