Set和WeakSet

Set和WeakSet

一、Set

​ Set是ES6给开发者带来的一种新的数据结构,你可以理解为值的集合,同时它的值不会有重复项。

Set的方法

  1. Set的初始化

    let set = new Set([1, 2, 3, [1]])
    console.log(set) //Set(4) {1, 2, 3, Array(1)}
    
  2. add()方法 用于给set中添加成员

    set.add(4) //4成功加入
    set.add(2) //因为set本来有2,所以不会产生影响
    console.log(set) //Set(5) {1, 2, 3, Array(1), 4}
    
  3. size属性 获取set长度

    console.log(set.size) //5
    
  4. delete属性 删除属性 成功true 失败 false

    console.log(set.delete(2)) //true
    console.log(set) //Set(4) {1, 3, Array(1), 4}
    console.log(set.delete([1])) //false  为什么会是false呢,看文章末尾解释
    console.log(set) //Set(4) {1, 3, Array(1), 4}
    
  5. clear()方法 清除所有成员

    set.clear()
    console.log(set) //Set(0) {size: 0}
    
  6. has()方法 判断set结构中是否含有指定的值。如果有,返回true;如果没有,返回fasle。

    //使用前先把clear方法注释掉,才会跟此代码块结果一致
    console.log(set.has(1)) //true
    console.log(set.has([1])) //false  为什么会是false呢,看文章末尾解释
    
  7. entries()方法 返回一个键值对的遍历器。

    console.log(set.entries()) //SetIterator{1 => 1, 3 => 3, Array(1) => Array(1), 4 => 4}
    for (let [key, value] of set.entries()) {
      console.log(key); //遍历键
      console.log(value); //遍历值     可以发现set的键和值一样
    }
    
  8. keys()方法 返回键名的遍历器

    for (let key of set.keys()) {
      console.log(key) // 1 3 [1] 4
    }
    
  9. values()方法 返回键值的遍历器

    for (let value of set.values()) {
      console.log(value) // 1 3 [1] 4
    }
    
  10. forEach 遍历

    set.forEach((item, index) => {
      // console.log(item);
      console.log(index) // 1 3 [1] 4
    })
    
  11. Set应用→数组去重

    let arr_2 = [1, 2, 3, 4, 1, 2]
    console.log(arr_2)
    console.log(Array.from(new Set(arr_2))) //法一 Array.from  
    console.log([...new Set(arr_2)]) //法二 扩展运算符
    

二、WeakSet

  • 注意点成员必须是引用类型的值

    // let weak = new WeakSet([1, 2, 3]) // Invalid value used in weak set
    let weak = new WeakSet([{ name: 'zs' }, [1, 2, 3], set])
    console.log(weak)
    // WeakSet结构也提供了add()方法,delete()方法,has()方法给开发者使用,作用与用法跟Set结构完全一致。
    // 不可遍历 没有size属性 entires keys values forEach 没有
    

    三、为什么会是false

  • ​ 因为数组是引用类型,他们的值相等,但地址不相等,举个例子

    let arr = [3]
    let arr_1 = [3]
    console.log(arr == arr_1) //false
    
  • 42
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值