一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
Set和Map是ES6新增的两个数据结构
,它的一些方法特性,在我们日常开发中也是经常能够用到,经常能够起到事半功倍的效果
Set的基本用法
Set类似于数组,但成员的值都是唯一的
,没有重复的值(经典场景数组去重
)。
Set本身是一个构造函数
,用来生成Set数据结构
先用代码演示一下Set的基本使用
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1]
const set = new Set([1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1])
console.log(set)
看一下打印的结果
可以看到把数组放进Set里,他会自动帮我们数组去重
,然后生成新的Set结构的数据,Set数据结构类似于一个伪数组
,不过他的长度不叫length叫size
,看到他的原型上有一些属性方法,我们罗列几个常用的用代码演示一下
-
add() 添加成员,返回的是Set结构本身
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1] const set = new Set() arr.forEach(item => { // set通过add添加成员 set.add(item) }) set.forEach(item => { console.log(item) })
还是刚才的数组,这次我们没有把数组直接放在
Set构造函数里面
,而是通过add()
方法添加进去,并且用forEach循环打印成员,Set数据结构也是可以通过forEach方法循环的
-
delete() 删除值,返回布尔值表示是否删除成功
console.log(set.delete(1)) console.log(set)
-
has() 返回布尔值,判断
Set
对象中是否含有某个值console.log(set.has(2)) // true
-
clear() 会移除所有元素,没有返回值
set.clear() console.log(set)
-
keys() 返回一个
SetIterator对象
,对象按照原Set
对象元素的插入顺序返回其所有元素const keys = set.keys() console.log(keys) console.log(set)
我们可以看到set.keys()返回的
SetIterator对象
,对原来的set数据结构没有任何影响
- values()
与
keys()
用法一样,返回SetIterator对象
,返回值也与keys()
一样
set.values()返回的
SetIterator对象
,对原来的set数据结构没有任何影响
- entries()
返回一个键值对形式的
SetIterator对象
,key和value
是集合中的每个元素
对原来的set数据结构没有任何影响
set数组去重
1、set配合扩展运算符
数组去重
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1]
const arr1 = [...new Set(arr)] //把new Set()放在数组里展开
console.log(arr1)
2、set配合
Array.from
实现数组去重
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1]
const arr1 = Array.from(new Set(arr))
console.log(arr1)
这两个利用set数组去重的方法还是很方便的