• ES6学习之Set 和 Map 数据结构


    Set对象

    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

    Set 实例的属性和方法

    • Set.prototype.constructor:构造函数,默认就是Set函数。
    • Set.prototype.size:返回Set实例的成员总数
    • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
    • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
    • Set.prototype.clear():清除所有成员,没有返回值。

    遍历操作 

    • Set.prototype.keys():返回键名的遍历器
    • Set.prototype.values():返回键值的遍历器
    • Set.prototype.entries():返回键值对的遍历器
    • Set.prototype.forEach():使用回调函数遍历每个成员
    • Set,prototype.map().对每个set元素执行相同的操作
    • Set,prototype.filter().赛选出符合条件的元素

    如果想在遍历操作中,同步改变原来的 Set 结构,目前没有直接的方法,但有两种变通方法。一种是利用原 Set 结构映射出一个新的结构,然后赋值给原来的 Set 结构;另一种是利用Array.from方法。

    WeakSet

    WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。

    首先,WeakSet 的成员只能是对象,而不能是其他类型的值

    其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。

    由于上面这个特点,WeakSet 的成员是不适合引用的,因为它会随时消失。另外,由于 WeakSet 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakSet 不可遍历。

    WeakSet的方法

    • WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
    • WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
    • WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在
    • weakSet没有size属性所以不能进行遍历

    Map 

    Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

    size属性返回 Map 结构的成员总数。

    Map.prototype.set(key, value)

    set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

    Map.prototype.get(key)

    get方法读取key对应的键值,如果找不到key,返回undefined

    Map.prototype.has(key)

    has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

    Map.prototype.delete(key)

    delete方法删除某个键,返回true。如果删除失败,返回false

    Map.prototype.clear()

    clear方法清除所有成员,没有返回值。

    遍历方法

    Map 结构原生提供三个遍历器生成函数和一个遍历方法。

    • Map.prototype.keys():返回键名的遍历器。
    • Map.prototype.values():返回键值的遍历器。
    • Map.prototype.entries():返回所有成员的遍历器。
    • Map.prototype.forEach():遍历 Map 的所有成员。

    WeakMap

    WeakMap结构与Map结构类似,也是用于生成键值对的集合。

    weakMapMap的区别有两点。

    首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。

    其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。

    WeakMap 与 Map 在 API 上的区别主要是两个,一是没有遍历操作(即没有keys()values()entries()方法),也没有size属性。

     
  • 相关阅读:
    结构型设计模式——享元
    结构型设计模式——装饰模式
    结构型设计模式——外观
    结构型设计模式——桥接模式
    结构型设计模式——适配器模式(Go)
    创建型设计模式——工厂模式
    创建型设计模式——单例模式
    Linux03
    阅读《构建之法》八九十章
    作业五 5.2 5.3
  • 原文地址:https://www.cnblogs.com/lin494910940/p/12549569.html
Copyright © 2020-2023  润新知