花十分钟掌握Set的基本用法

149 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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)

看一下打印的结果

image.png

可以看到把数组放进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) })

image.png 还是刚才的数组,这次我们没有把数组直接放在Set构造函数里面,而是通过add()方法添加进去,并且用forEach循环打印成员,Set数据结构也是可以通过forEach方法循环的

  • delete() 删除值,返回布尔值表示是否删除成功

    console.log(set.delete(1)) console.log(set)

image.png

  • has() 返回布尔值,判断Set对象中是否含有某个值

    console.log(set.has(2)) // true

  • clear() 会移除所有元素,没有返回值

    set.clear() console.log(set)

image.png

  • keys() 返回一个SetIterator对象,对象按照原Set对象元素的插入顺序返回其所有元素

    const keys = set.keys() console.log(keys) console.log(set)

image.png 我们可以看到set.keys()返回的SetIterator对象,对原来的set数据结构没有任何影响

  • values() 与keys()用法一样,返回SetIterator对象,返回值也与keys()一样

image.png set.values()返回的SetIterator对象,对原来的set数据结构没有任何影响

  • entries() 返回一个键值对形式的SetIterator对象key和value是集合中的每个元素

image.png 对原来的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)

image.png 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)

image.png 这两个利用set数组去重的方法还是很方便的