美文网首页
ES6 - Set 和 Map

ES6 - Set 和 Map

作者: 恒星的背影 | 来源:发表于2018-09-27 21:27 被阅读0次

    Set

    结构类似数组,但是没有重复的值
    Set 的遍历顺序是插入顺序

    没有字面量表达式,只能通过 new Set() 构造,并通过 add 方法添加项目:

    const s = new Set();
    [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    

    可以接受有 Iterator 接口的对象作为参数进行初始化:

    const set = new Set([1, 2, 3, 4, 4]);
    [...set]  // [1, 2, 3, 4]
    

    实例属性和方法:
    size() 返回成员数量
    add(value) 添加成员
    delete(value) 删除成员
    has(value) 检查是否是Set的成员
    clear() 清除所有成员

    keys():返回键名的遍历器
    values():返回键值的遍历器
    entries():返回键值对的遍历器
    forEach():使用回调函数遍历每个成员
    for...of

    let set = new Set(['red', 'green', 'blue']);
    for (let item of set.entries()) {
      console.log(item);
    }
    // ["red", "red"]
    // ["green", "green"]
    // ["blue", "blue"]
    

    Set 的很多操作可以先转成数组去做,然后再转回Set

    let set = new Set([1, 2, 3]);
    set = new Set([...set].map(x => x * 2));
    // 返回Set结构:{2, 4, 6}
    

    Map

    Map 和对象的区别在于可以使用各种类型的值作为 key;使用对象作为 key,可以避免同名属性冲突的问题
    Map 的遍历顺序是插入顺序

    const m = new Map();
    const o = {p: 'Hello World'};
    
    m.set(o, 'content')
    m.get(o) // "content"
    
    m.has(o) // true
    m.delete(o) // true
    m.has(o) // false
    

    作为构造函数,Map 可以接受数组作为参数:

    const map = new Map([
      ['name', '张三'],
      ['title', 'Author']
    ]);
    
    map.size // 2
    map.has('name') // true
    map.get('name') // "张三"
    

    任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构都可以当作 Map 构造函数的参数

    实例属性和方法:
    size() 返回成员总数
    set(key, value) 更新键值,返回 map
    get(key)
    has(key) 返回布尔值
    delete(key) 返回布尔值
    clear() 清除所有成员,没有返回值

    keys():返回键名的遍历器
    values():返回键值的遍历器
    entries():返回键值对的遍历器
    forEach():使用回调函数遍历每个成员
    for...of

    Map 的很多操作可以先转成数组去做,然后再转回Map

    const map1 = new Map(
      [...map0].filter(([k, v]) => k < 3)
    );
    

    WeakSet 和 WeakMap

    WeakSet 的成员只能是对象,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
    WeakMap 只接受对象作为key,且 key 指向的对象不计入垃圾回收机制

    相关文章

      网友评论

          本文标题:ES6 - Set 和 Map

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