es6_Set数据类型概括


set(集合)数据类型为Es6新增的数据类型(是引用数据类型);

作用

存储一组数据(和数组非常相似,区别是无法存储重复的元素(精确相等===))

语法
  • [1]创建set数据

    • let s=new Set([arr])
    • arr参数为可选择的–>数据类型为数组\字符串(否则会报错)

    • console.log('111',new Set(111)) // error number 111 is not iterable
      
  • [2]add()方法向 Set 结构加入成员

    • s.add(value)
      
    • 一次只能添加一个值–>添加多个参数仅会添加一个值;

    • 返回值为该set结构;

  • [3]delete()方法删除Set结构的某个值

    • s.delete(value)
      
    • 返回一个布尔值,表示删除是否成功

  • [4]has()方法判断Set结构中是否有该元素

    • s.has(value)
      
    • 返回一个布尔值,表示该值是否为Set的成员

  • [5]size属性用于返回set结构中元素的数量

    • s.size
      
  • [6]clear()方法用于清除该set的所有成员;

    • s.clear()
      
  • 举例说明

    • set在比较过程中,简单数据类型比较全等;引用数据类型比较的是数据的地址引用

    • const set = new Set([[111]])
      console.log('111111', set.has([111])) // false
      
      • 引用地址不同,找不到相同数据
    • const arr = [111]
      const set = new Set([arr])
      console.log('111111', set.has(arr)) // true
      
      • 引用地址相同,认为是同一数据
    • const num = NaN
      const set = new Set([num])
      console.log('111111', set.has(num)) // true
      
      const set = new Set([NaN])
      console.log('111111', set.has(NaN)) // true
      
      • 在 Set中, 会将NaN比较为相等的;
set数据遍历

(1)Set 结构的实例有四个遍历方法,可以用于遍历成员。

[1]遍历方法

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员

[2]举例说明

  • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
    const s = new Set(arr)
    console.log('s',s.keys())
    
    • 在这里插入图片描述

    • 就个人而言,觉得 keys、values、entries遍历方法作用不大,因为获取的还是遍历器,还是需要遍历 遍历器才能获取数据!

    • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
      const s = new Set(arr)
      for(const item of s.keys()){
        console.log('item', item)
      }
      
    • 在这里插入图片描述

  • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
    const s = new Set(arr)
    s.forEach(item=>{
      console.log('item', item)
    })
    
    • 在这里插入图片描述

    • 还是forEach遍历set更方便一些;

(2)遍历的应用

应用
[1]数组去重
const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
const s = new Set(arr) // 存储的是传入数组中不重复的数据
将set数据转化为数组
  • (1)使用Array.from方法

    • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
      const s = new Set(arr) 
      const newArr = Array.from(s)
      console.log('newArr', newArr) // [1, 2, 3, 'a', 'b', 'c']
      
  • (2)使用for of遍历

    • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
      const s = new Set(arr) // 存储的是传入数组中不重复的数据
      const newArr = []
      for(const item of s){
        newArr.push(item)
      }
      console.log('newArr', newArr) // [1, 2, 3, 'a', 'b', 'c'] 
      
  • (3)使用展开运算符

    • 展开运算符是es6新增的遍历方法,内部其实是使用 for of进行封装的;

    • const arr = [1,2,3,3,2,1,'a','b','c','c','b','a']
      const s = new Set(arr) // 存储的是传入数组中不重复的数据
      const newArr = [...s]
      console.log('newArr', newArr) // [1, 2, 3, 'a', 'b', 'c'] 
      
[2]取数组并集
const arr1 = [1,2,3,3,2,1,'c','b','a']
const arr2 = [1,2,4,6,8,9]
const s = new Set([...arr1,...arr2]) // 存储的是传入数组中不重复的数据
const newArr = [...s]
console.log('newArr', newArr) // [1, 2, 3, 'c', 'b', 'a', 4, 6, 8, 9]
[3]取数组交集
const arr1 = [1,2,3,3,2,1,'c','b','a']
const arr2 = [1,2,1,4,6,8,9]
const s1 = new Set(arr1) 
const s2 = new Set(arr2)
const arr = [...s1].filter(item => s2.has(item))
console.log('newArr', arr) // [1, 2]
[4]去重字符串中的重复字符;
const str = 'hello word'
const newStr = [...new Set(str)].join('')
console.log('newStr', newStr) // newStr helo wrd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值