• ES6-11学习笔记--Set


    Set:一种新的数据结构
    常用方法
    遍历
    应用场景
    WeakSet
     
    常用方法:
    // Set的成员值一定是唯一的不重复的
    let s = new Set([1, 2, 3, 2])
    // 添加数据add
    s.add('a')
    // add可以链式操作
    s.add('b').add('c')
    // 删除数据delete
    s.delete('b')
    // 清除所有数据clear
    // s.clear()
    console.log(s);
    // has判断是否包含某项数据
    console.log(s.has('a')); // true
    // size输出包含多少项数据
    console.log(s.size);
    

      

    遍历Set:
    s.forEach(item => console.log(item))
    for (let item of s) {
        console.log(item);
    }
    // Set的key值和value值是一样的
    for (let item of s.keys()) {}
    for (let item of s.values()) {}
    for (let item of s.entries()) {
        console.log(item[0], item[1]);
    }
    

      

    应用场景
     
    数组去重
    let arr = [1, 2, 3, 4, 2, 3];
    let s1 = new Set(arr)
    console.log(s1);
    // Set转换成数组
    console.log([...s1]);
    console.log(Array.from(s1));
    

      

    数组合并去重,这里也能理解成并集
    let arr1 = [1, 2, 3, 4]
    let arr2 = [2, 3, 4, 5, 6]
    let s2 = new Set([...arr1, ...arr2])
    console.log(s2);
    

      

    交集
    let s3 = new Set(arr1)
    let s4 = new Set(arr2)
    let res = new Set(arr1.filter(item => s4.has(item)))
    console.log(res);
    

      

    差集:除去交集的元素
    let res2 = new Set(arr1.filter(item => !s4.has(item)))
    let res3 = new Set(arr2.filter(item => !s3.has(item)))
    console.log(res2);
    console.log(res3);
    console.log([...res2, ...res3]);
    

      

    WeakSet和Set类似,但是有以下区别。
    1、WeakSet的成员只能是对象,而不能是其他类型的值
    2、WeakSet中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用。所以WeakSet不能被循环遍历
    let ws = new WeakSet()
    const obj1 = {
        name: '张三'
    }
    const obj2 = {
        age: 18
    }
    ws.add(obj1)
    ws.add(obj2)
    // 删除的时候要是同一个内存地址的对象才可以正确删除
    ws.delete(obj1)
    console.log(ws);
    console.log(ws.has(obj2));
    

      

     
     
    放弃安逸,持续努力——成长
  • 相关阅读:
    spring-mybatis 事物配置 execution表达式含义
    微信内置浏览器缓存导致链接无法多次访问
    linux学习记录-------解决复制的虚拟机,无法同时上网
    mybatis-select-insert-update-delete
    tomcat 端口被占用
    EFCodeFirst安装失败(包括EntityFrameWork安装),这样解决。。。
    数组的一些操作
    《Java技术》第三次作业--面向对象——继承、抽象类、接口
    java第二次作业
    《Java技术》第一次作业
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/14828105.html
Copyright © 2020-2023  润新知