• Set && Map


    ES6 提供了新的数据结构 Set, Map

    Set成员的值都是唯一的,没有重复的值,Set内的元素是强类型,会进行类型检查。

    let set = new Set([1, true, '1', 'true', 1])
    // Set(4) {1, true, "1", "true"}

    Set处理并集(Union)、交集(Intersect)和差集(Difference)

    let a = new Set([1, 2, 3]);
    let b = new Set([4, 3, 2]);
    
    // 并集
    let union = new Set([...a, ...b]);
    // Set {1, 2, 3, 4}
    
    // 交集
    let intersect = new Set([...a].filter(x => b.has(x)));
    // set {2, 3}
    
    // (a 相对于 b 的)差集
    let difference = new Set([...a].filter(x => !b.has(x)));
    // Set {1}

    Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

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

    Map To Array

    const myMap = new Map()
      .set(true, 7)
      .set({foo: 3}, ['abc']);
    [...myMap]
    // [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]

    Array To Map

    new Map([
      [true, 7],
      [{foo: 3}, ['abc']]
    ])
    // Map {
    //   true => 7,
    //   Object {foo: 3} => ['abc']
    // }

    Map To Object

    function strMapToObj(strMap) {
      let obj = Object.create(null);
      for (let [k,v] of strMap) {
        obj[k] = v;
      }
      return obj;
    }
    
    const myMap = new Map()
      .set('yes', true)
      .set('no', false);
    strMapToObj(myMap)
    // { yes: true, no: false }

    Object To Map

    let obj = {"a":1, "b":2};
    let map = new Map(Object.entries(obj));

    Map To JSON

    function strMapToJson(strMap) {
      return JSON.stringify(strMapToObj(strMap));
    }
    
    let myMap = new Map().set('yes', true).set('no', false);
    strMapToJson(myMap)
    // '{"yes":true,"no":false}'

    JSON To Map

    function jsonToStrMap(jsonStr) {
      return objToStrMap(JSON.parse(jsonStr));
    }
    
    jsonToStrMap('{"yes": true, "no": false}')
    // Map {'yes' => true, 'no' => false}
    WeakSet && WeakMap 所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakSet && WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。
  • 相关阅读:
    C# Split() 去除 分组
    C#获取当前路径的7种方法
    给 C# 开发者的代码审查清单
    【知乎】一句话答案收录集,一句足矣
    C# string和byte[]的转换
    WCF 有零个操作;协定必须至少有一个操作
    WPF中动态改变控件显示位置
    转 将iPhone和Android手机屏幕投影仪投影显示
    转 MySQL数据库监控软件lepus使用问题以及解决办法
    转 Shell中的IFS解惑
  • 原文地址:https://www.cnblogs.com/magicg/p/13818790.html
Copyright © 2020-2023  润新知