ES6的Set结构用法总结

一.关于Set结构

Set是es6中新推出的一种数据结构
先通过代码来说一下Set的特性

const set = new Set()
      const arr1 = [1, 2, 3, 4, 5, 5]
      arr1.forEach(item => set.add(item))
      console.log(set) // 1,2,3,4,5
      for (const i of set) {
        console.log(i)
      }

在这里插入图片描述

  • 可以看出来Set是一个构造函数,通过new关键字进行实例化的。

  • 并且set结构中的数据不会重复(那么说明Set可以进行数据的去重)

下面再看一段代码

const set = new Set()
      set.add(5)
      set.add('5')
      console.log(set)
const newSet = new Set()
      const a = NaN
      const b = NaN
      newSet.add(a)
      newSet.add(b)
      console.log(newSet)

在这里插入图片描述

通过这段代码 发现NaN只输出了一个 并且5不等于’5’的,他相似于 === 但并不完全是 ===

const set = new Set()
      set.add({}) // 向set中添加一个空对象
      console.log(set.size) // 1
      set.add({}) // 向set中添加另一个空对象
      console.log(set.size) // 2
  • 两个空对象在set中是不相等的

通过以上的例子,可以总结出Set结构有以下几个特性

  • Set是一个构造函数,想要使用必须用new关键字
  • Set中的数据不会重复,往Set中添加数据时会进行去重
  • Set中两个空对象是不相等的

二.关于Set的一些属性与方法

在这里插入图片描述

这是通过构造函数实例化后 打印出来的Set

属性:

  • size 类似于数组的length长度 返回set实例的成员总数

方法:

  • add() 向set实例中添加成员,并返回set本身
  • delete() 删除set实例中的某个成员,返回一个Boolean值,用于判断是否删除成功
  • has() 返回一个Boolean值,判断set示例中是否有这个成员
  • clear() 清除Set结构中的所有成员,并且没有返回值
  • keys() 返回键名的遍历器
  • values() 返回键值的遍历器
  • entries() 返回键值对的遍历器(键名:键值)
  • forEach() 通过回调函数遍历每个成员

以上是总结出来的一些常用属性与方法,下面将会介绍它们

1. size属性,add(),has(),delete(),clear()方法

const set = new Set()
      set.add(1)
      set.add(2)
      set.add(3).add(4).add(5)
      console.log(set.size)
      console.log(set)
      console.log(set.has(3))
      console.log(set.delete(2))
      set.clear()
      console.log(set)

在这里插入图片描述

  • add()上面已经用过,主要是用于向Set结构中添加成员
  • has方法用于判断set结构中是否有此值,返回布尔值
  • delete方法用于删除此值,成功或者失败都返回布尔值
  • clear方法用于清空此set结构中所有的值,没有返回值
2. keys()、values()、entries()、forEach()方法
  • keys方法、values方法、entries方法返回的都是遍历器对象
  • 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致

 const set = new Set(['red', 'blue', 'black'])
      for (const key of set.keys()) {
        console.log(key)     // red,blue,green
      }
      for (const value of set.values()) {
        console.log(value)  // red,blue,green
      }
      for (const item of set.entries()) {
        console.log(item)   // ['red','red'],['blue','blue'],['green','green']
      }
      set.forEach((key, value) => {
        console.log(key + ':' + value)
      })


在这里插入图片描述

3.Array.from()方法

Array.from()可以将set结构转为数组,这就提供了去除数组重复成员的另一种方法


const items = new Set([1, 2, 3, 4, 5])
      console.log(items) // 1,2,3,4,5
      const array = Array.from(items)
      console.log(array) // 1.2.3,4,5
      // Array.from()方法实现数组去重
      function dedupe (arr) {
        return Array.from(new Set(arr))
      }
      console.log(dedupe([1, 1, 2, 3])) // 1,2,3
    }
  }


三.Set的遍历应用

1.数组去重以及字符串去重
function dedupe (arr) {
        return Array.from(new Set(arr))
      }
      console.log(dedupe([1, 1, 2, 3])) // 1,2,3
      const arrs = [1, 1, 3, 3, 4, 5, 6]
      const unique = [...new Set(arrs)]
      console.log(unique) // 1,3,4,5,6
// 字符串去重
      const set = [...new Set('aabbccdefg')].join('')
      console.log(set)



在这里插入图片描述

2.间接使用数组的遍历方法
  • 内部使用(…)扩展运算符,与set结构相结合,可以使用数组的map或filter方法

 let set = new Set([1, 2, 3, 4, 5])
      set = new Set([...set].map(x => x * 2)) // 使用数组的map方法
      console.log(set) // 2,4,6,8,10
      let mySet = new Set([1, 2, 3, 4, 5])
      mySet = new Set([...mySet].filter(x => x % 2 === 0)) // 使用数组的filter方法
      console.log(mySet) // 2,4


在这里插入图片描述

3.通过Set实现并集,交集,差集

const set1 = new Set([1, 2, 3])
      const set2 = new Set([2, 3, 4])
      let union = new Set([...set1, ...set2])
      // 如果需要数组结构 通过Array.from即可转变为数组
      union = Array.from(union)
      console.log(union)
      let combind = new Set([...set1].filter(x => set2.has(x)))
      // 如果需要数组结构 通过Array.from即可转变为数组
      combind = Array.from(combind)
      console.log(combind)
      const diffrence = new Set([...set1].filter(x => !set2.has(x)))
      console.log(diffrence)


在这里插入图片描述
以上是总结的一些常用的Set结构的用法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值