ES6的set用法

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的一些属性与方法

属性:size 类似于数组的length长度 返回set实例的成员总数
方法:add() 向set实例中添加成员,并返回set本身
delete() 删除set实例中的某个成员,返回一个Boolean值,用于判断是否删除成功
has() 返回一个Boolean值,判断set示例中是否有这个成员
clear() 清除Set结构中的所有成员,并且没有返回值
keys() 返回键名的遍历器
values() 返回键值的遍历器
entries() 返回键值对的遍历器(键名:键值)
forEach() 通过回调函数遍历每个成员
以上是总结出来的一些常用属性与方法,下面将会介绍它们:
add()主要是用于向Set结构中添加成员
has方法用于判断set结构中是否有此值,返回布尔值
delete方法用于删除此值,成功或者失败都返回布尔值
clear方法用于清空此set结构中所有的值,没有返回值
2. keys()、values()、entries()、forEach()方法
keys方法、values方法、entries方法返回的都是遍历器对象
由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致
3.Array.from()方法
Array.from()可以将set结构转为数组,这就提供了去除数组重复成员的另一种方法
三.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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ES6中的Set和Map是两种新增的集合类型。Set是一种无重复值的集合,可以通过new Set()来创建。它具有add方法用于向集合中添加元素,has方法用于判断集合中是否存在某个元素,clear方法用于清空集合。Set也可以用于数组去重,通过new Set(\[...\])的方式将数组转换为Set,利用Set的特性去除重复值。\[1\] Map是一种键值对的集合,可以通过new Map()来创建。它具有set方法用于向集合中添加键值对,get方法用于获取指定键名对应的值,has方法用于判断集合中是否存在某个键名,clear方法用于清空集合。Map的键名可以是任意数据类型,包括引用值,但需要注意的是,引用值作为键名时,需要使用相同的引用地址才能获取到对应的值。\[2\] Set和Map都可以使用for...of循环或forEach方法进行遍历。在Set中,forEach的第二个参数是集合的元素,因为Set中不存在下标。而在Map中,forEach的第一个参数是键值对的值,第二个参数是键值对的键名。\[3\] 总结来说,Set和Map是ES6中新增的集合类型,Set用于存储无重复值的集合,Map用于存储键值对的集合。它们提供了一些方法来操作集合,如添加、获取、判断是否存在等。在使用时需要注意它们的特性和方法的使用方式。 #### 引用[.reference_title] - *1* *2* [ES6中的Map和Set详解](https://blog.csdn.net/m0_45093055/article/details/126430467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ES6中的set与map](https://blog.csdn.net/weixin_44247866/article/details/127561391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值