zoukankan      html  css  js  c++  java
  • ES6-08:新增数据结构—Set、WeakSet、Map、weakMap

    ES6新增了四类数据结构:分别是SetWeakSetMapWeakMap.

    1. Set —没有重复成员元素的数组;

    • 本质:Set本身是一个构造函数;接收一个具有iterable接口数据结构的参数,用来生成一个没有重复元素的数组;
    let nums=new Set([1,2,3,4,3,2]);//[1,2,3,4]
    nums.add(2);//[1,2,3,4]
    nums.add('2');//[1,2,3,4,'2']
    nums.add({});//[1,2,3,4,'2',{}]  Set添加元素时不会发生类型转换,
    nums.add({});//[1,2,3,4,'2',{},{}]  Set添加的对象总不相等
    
    • 2个属性:
    // ① Set.prototype.constructor:返回Set的构造函数
    // ② Set.prototype.size:返回Set实例的成员个数
    
    • 两类8个方法:操作方法(4种)+遍历方法(4种)

    Set.add(value):向Set实例添加值value,返回Set结构本身 ;
    Set.delete(value):向Set实例删除值value,返回boolean, 成功为true,失败返回false;
    Set.has(value):检查Set实例是否含有值value,返回boolean,包含返回true,不包含返回false
    Set.clear():清楚Set实例的所有成员,无返回值;

    Set.keys():返回键名的遍历器;
    Set.values():返回键值的遍历器;
    Set.entries():返回键值对的遍历器;
    Set.forEach((value,key)=>{},thisObj):使用回调函数遍历每个成员

    • 使用场景:①数组去重、②求数组的交集、并集、差集
    // ①数组去重
    let arr=[1,2,3,4,3,2,1];
    let b=[...arr];//[1,2,3,4]
    let a=Array.from(new Set(arr));//[1,2,3,4]
    // ②数组运算
    
    let arr1=new Set([1,2,3,4]);
    let arr2=new Set([3,4,5,6]);
    let union=new Set([...arr1,...arr2]);//[1,2,3,4,5,6]
    let intersect=new Set([...arr1].filter(value=>b.has(value)));//[3,4]
    let diffrence=new Set([...arr1].filter(value=>!b.has(value)));//[1,2]
    

    2. WeakSet—成员只能是对象的Set

    • WeakSet的成员只能是对象不能是其他类型值;
    • WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用;

    弱引用,即当一个WeakSet实例的成员引用对象A时,当其他对象不在引用对象A,JS的垃圾回收机制便会自动回收该对象占用的内存,不考虑WeakSet实例是否还在引用;弱引用的对象随时可能消失,无法保证成员的存在,因此WeakSet相比较Set数据结构,没有clear()方法、没有size属性、也没有遍历方法;

    3. Map——键值对的键名、键值都可以为任意数据结构的对象;

    ES5中对象(Object)本质上都是简直对的集合(Hash结构),但只能用字符串作为键名;Map对象可以用对象作为键名,实现真正的值-值对;对于键名、键值均为对象的Map数据,在内存中存储时,实际上是两个对象的索引值对索引值的对应关系映射;

    • 属性:Map.size返回Map实例成员的总数;

    • 方法:操作方法(5种)+遍历方法(4种)
      Map.set(key,value):设置key值对应的值,如果key存在,则覆盖原有值;
      Map.get(key):获取键名为key的键值;
      Map.has(key):检查键名key是否存在Map实例中,返回boolean值,若存在返回true,不存在返回false;
      Map.delete(key):删除键名为key的属性,返回boolean值,若删除成功返回true,失败返回false;
      Map.clear():清除Map实例的所有成员,无返回值
      Map.keys():返回键名的遍历器
      Map.values():返回键值的遍历器
      Map.entries():返回所有成员的遍历器
      Map.forEach((value,key,map)=>{},thisObj):遍历Map的所有成员

    • Map 与其他数据类型之间相互转换
      。。。
      。。。

    4.WeakMap—键名只能为对象的Map,弱引用

    • WeakMap的成员的键名只能是对象不能是其他类型值;
    • WeakMap中的键名和值都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用;
  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/hbzyin/p/8012309.html
Copyright © 2011-2022 走看看