zoukankan      html  css  js  c++  java
  • Map()--es6新增数据结构

    1、实例属性和操作方法
    1)size属性
      const map = new Map();
      map.set('foo', true);
      map.set('bar', false);
      console.log(map.size);
    2)set(key, value)
    3)get(key) 如果找不到key,返回undefined
    4)has(key)
    5)delete(key)
    6)clear() 清除所有成员
    2、遍历方法
    -keys():返回键名的遍历器。
    -values():返回键值的遍历器。
    -entries():返回所有成员的遍历器。
    -forEach():遍历Map的所有成员。
    注意:Map的遍历顺序就是插入顺序
      const map = new Map([
        ['F', 'no'],
        ['T', 'yes'],
      ])
      for(let key of map.keys()) {
        console.log(key);
      }

      for(let value of map.values()) {
        console.log(value);
      }

      for(let item of map.entries()) {
        console.log(item);
      }

      for(let [key, value] of map) {
        console.log([key, value]);
      }
    Map()结构转换为数组 用扩展运算符
      const map1 = new Map([
        [1, 'one'],
        [2, 'two'],
        [3, 'three']
      ]);
      console.log([...map1.keys()]);
      console.log([...map1.values()]);
      console.log([...map1.entries()]);
      console.log([...map1]);

    结合数组的map方法、filter方法,可以实现 Map 的遍历和过滤(Map 本身没有map和filter方法)

      const map0 = new Map()
        .set(1, 'a')
        .set(2, 'b')
        .set(3, 'c');
      const map4 = new Map(
        [...map0].filter(([k, v]) => k < 3)
      )
      console.log([...map4]);

      const map5 = new Map(
        [...map0].map(([k, v]) => [k * 2, '_' + v]
      )
      console.log([...map5]);

      map0.forEach(function(value, key, map) {
        console.log("key: %s, Value: %s", key, value);
      })
      const reporter = {
        report: function(key, value) {
          console.log("Key: %s, Value: %s", key, value);
        }
      }
      map.forEach(function(value, key, map){
        this.report(key, value);
      }, reporter) ;

    3、与其他数据的互相转换
    1)Map转化为数组
      const myMap = new Map()
        .set(true, 7)
        .set({foo: 3}, ['abc']);
      console.log([...myMap]);
    2)数组转化为Map
      new Map([
        [true, 7],
        [{foo: 3}, ['abc']]
      ])
    3)Map转化为对象
      function strMapToObj(strMap) {
        let obj = Object.create(null);
        for(let [k, v] of strMap) {
          obj[k] = v;
        }
        return obj;
      }
      const myMap1 = new Map()
        .set('yes', true)
        .set('no', false);
      console.log(strMapToObj(myMap1))
    4)对象转化为Map
      function objToStrMap(obj) {
        let strMap = new Map();
        for(let k of Object.keys(obj)) {
          strMap.set(k, obj[k]);
        };
        return strMap;
      }
      console.log(objToStrMap({yes: true, no: false}))
    5)map转化为JSON
    Map 转为 JSON 要区分两种情况。一种情况是,Map
    的键名都是字符串,这时可以选择转为对象 JSON。
      function strMapToJson(strMap) {
        return JSON.stringify(strMapToObj(strMap));
      }
      let myMap2 = new Map().set('yes', true).set('no', false);
      console.log(strMapToJson(myMap2));
    另一种情况是,Map 的键名有非字符串,这时可以选择转为数组 JSON。
      function mapToArrayJson(map) {
        return JSON.stringify([...map]);
      }
      let myMap3 = new Map().set(true, 7).set({foo: 3}, ['abc']);
      console.log(mapToArrayJson(myMap3))
    6)JSON转化为Map
    JSON 转为 Map,正常情况下,所有键名都是字符串。
      function jsonToStrMap(jsonStr) {
        return objToStrMap(JSON.parse(jsonStr));
      }
      console.log(jsonToStrMap('{"yes": true, "no": false}'));
    但是,有一种特殊情况,整个 JSON 就是一个数组,且每个数组成员本身,又是一个有两个成员的数组。这时,它可以一一对应地转为 Map。这往往是 Map 转为数组 JSON 的逆操作。
      function jsonToMap(jsonStr) {
        return new Map(JSON.parse(jsonStr));
      }
      console.log(jsonToMap('[[true,7],[{"foo":3},["abc"]]]'))

  • 相关阅读:
    spring boot SpringApplication.run 执行过程
    算法 计算四则运算字符串结果
    算法 RingBuffer
    java BigDecimal 四舍五入
    算法 常用函数和近似
    java 多线程执行
    Java 三个线程依次输出ABC
    Java interrupt 中断
    java 垃圾收集器与内存分配策略
    软件项目与软件产品的区别
  • 原文地址:https://www.cnblogs.com/insignificant-malt/p/8556414.html
Copyright © 2011-2022 走看看