美文网首页
Set和Map数据结构

Set和Map数据结构

作者: 泥垢樂 | 来源:发表于2018-11-21 13:49 被阅读0次

    参考:《Set和Map数据结构》


    1. Set

    Set中成员的值是唯一的,没有重复的值。可以用于去除数组重复数据

    let set = new Set()
    // 在Set内部,两个NaN是相等的
    let a = NaN, b = NaN
    set.add(a).add(b)
    set.size // 1
    
    // 两个对象总是不相等的
    set.add({})
    set.size // 2
    set.add({})
    set.size // 3
    

    2个实例属性

    • Set.prototype.constructor:请忽略
    • Set.prototype.size

    4个操作方法

    • add(value)
    • delete(value)
    • has(value)
    • clear()

    4个遍历方法

    • keys()
    • values():默认
    • entries():键名和键值是同一个值,该方法用处不大
    • forEach()

    set的遍历顺序就是插入顺序。
    数组的mapfilter方法也可以间接用于Set。


    2. WeakSet

    与Set的2个区别:

    1. WeakSet的成员只能是对象(null也不行),而不能是其他类型的值。
    2. WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对改对象的引用。

    3个操作方法

    • add(value)
    • delete(value)
    • has(value)

    size属性,WeakSet不可遍历。
    clear()操作方法,无遍历操作。

    好处:不会出现内存泄露


    3. Map

    Object:字符串—值
    Map:值—值

    属性

    • size

    5个操作方法

    • set(key, value)
    • get(key)
    • has(key)
    • delete(key)
    • clear()

    4个遍历方法

    • keys()
    • values()
    • entries():默认
    • forEach()

    Map的遍历顺序就是插入顺序,和Set一样。
    结合数组的map方法、filter方法,可以实现Map的遍历和过滤(Map本身没有mapfilter方法)

    Map的forEach与数组的forEach类似,但区别如下:

    // Map的forEach,参数为value、key、map,注意value在前key在后
    map.forEach((value, key, map) => console.log(key, value, map))
    
    // Array的forEach,参数为item、index
    array.forEach((item, index) => console.log(item, index))
    

    4. WeakMap

    与Map的2个区别:

    1. WeakMap只接受对象作为键名(null也不行),不接受其他类型的值作为键名。
    2. WeakMap的键名指向的对象,不计入垃圾回收机制。

    4个操作方法

    • get()
    • set()
    • has()
    • delete()

    size属性,WeakMap不可遍历。
    clear()操作方法,无遍历操作。

    注:WeakMap弱引用的只是键名,而不是键值。键值依然是正常引用。

    const wm = new WeakMap()
    let key = {}
    let obj = { foo: 1 }
    
    wm.set(key, obj)
    obj = null
    wm.get(key) // Object { foo: 1 }
    

    (完)

    相关文章

      网友评论

          本文标题:Set和Map数据结构

          本文链接:https://www.haomeiwen.com/subject/khyqqqtx.html