ES6的Set详解

数组去重
let arr = [ 1,2,3,4,5,3,2 ]
    // 数组去重
    // 方法一
    let newArr = [new Set(arr)]
    console.log(newArr);
    // 方法二
    let newArr2 = Array.from(new Set(arr))
    console.log(newArr2);
数组对象去重
let obj = [
        {id : 1 ,name : 'zs'},
        {id : 2 ,name : 'ls'},
        {id : 3 ,name : 'ww'},
        {id : 2 ,name : 'ls'}
     ]

    //  数组对象去重     
     let newObj = [...new Set(obj.map(el=> JSON.stringify(el)))].map(res=> JSON.parse(res))
     console.log(newObj);
    //  步骤拆解:
    /*
    1、判断两个基本数据类型是否相同,比较的是数据的值。判断两个引用类型是否一样,比较的是引用
    2、set无法将数组对象去重,set去重的原理主要是判断两者存储的单元位置是否一样,如果一样才能去重。
    3、基本类型数据存储在栈,值相同就直接去重。引用数据类型存储在堆,引用类型数据 值 相同 位置不相同也无法去重。参考第一条的解释。
    4、只要将引用类型数据转变成基本数据类型,基本数据类型直接比较就可以去重了。去重完成后通过字符串转json对象即可。
    */
   /*
          [...new Set(obj.map(el=> JSON.stringify(el)))]   这一步 map 将内部的每一条转换成字符串,返回一个新数组,也就是引用类型数据转基本类型数据,下面是转换结果
           [ 
            0: "{\"id\":1,\"name\":\"zs\"}"   // 字符串
            1: "{\"id\":2,\"name\":\"ls\"}"   // 字符串
           ]
          .map(res=> JSON.parse(res))  这一步将去重处理好的值转换为对象 得到最终结果
   */
数组添加
let arr3 = [
        {id : 1 ,name : 'zs'},
        {id : 2 ,name : 'ls'},
        {id : 3 ,name : 'ww'}
      ]

      let newArr3 = new Set(arr3)
    //   尾部添加
      newArr3.add({id : 4,name : 'swk'})
      console.log('尾部添加');
      console.log(newArr3);
数组删除
let arr4 = [1,2,3,4,5,4,4,4]
      let newArr4 = new Set(arr4)
      newArr4.delete(2)    // 删除成功返回:true    删除失败返回:false
      console.log('删除数组中某一项');
      console.log(newArr4);
检测数组值是否存在
let arr5 = [1,2,3,4,5,6,7]
      let newArr5 = new Set(arr5)
      console.log('检测数组中是存在set值');   
      console.log(newArr5.has(5));// 存在返回true,不存在返回false
清除数组所有的值
let arr6 = [1,2,3,4,5]
      let nweArr6 = new Set(arr6)
      nweArr6.clear()   // 清除数组中所有值,没有返回值
      console.log('清除数组中所有值');
      console.log(nweArr6);
数组长度
let arr7 = [1,2,3,4,5]
      let newArr7 = new Set(arr7)
      console.log('获取数组的长度 & size 从1开始');  
      console.log(newArr7.size);  
数组遍历方法

      // 这几个与es6的遍历方法一致
      Set.prototype.keys()   //—— 返回键名的遍历器
      Set.prototype.values()   // —— 返回键值的遍历器
      Set.prototype.entries()  // —— 返回键值对的遍历器
      Set.prototype.forEach()  // —— 使用回调函数遍历元素
      // 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),
      // 所以 keys 方法和 values 方法的行为完全一致
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值