zoukankan      html  css  js  c++  java
  • ES6 Map与Set

    ES6 Map与Set

    1、map

    <script type="text/javascript">
      //ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
      const m = new Map();//创建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
      const m1 = new Map([
          ['name', '张三'],
          ['title', 'Author']
      ]);//Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
      m1.size // 2
      m1.has('name') // true
      m1.get('name') // "张三"
      m1.has('title') // true
      m1.get('title') // "Author"
    
        //常用方法
      const m2 = new Map([['foo',true],['bar', false]]);
      m2.size; // 获取大小
      m2.set('dwd',true); //设置键值对
      m2.get('dwd');//获取键的值
      m2.has('dwd');//判断是否有键
      m2.delete('dwd');//删除键
      m2.clear();//清空
    
        //遍历
      const map = new Map([
          ['F', 'no'],
          ['T',  'yes'],
      ]);
    
      for (let key of map.keys()) {
          console.log(key);
      }
      // "F"
      // "T"
    
      for (let value of map.values()) {
          console.log(value);
      }
      // "no"
      // "yes"
    
      for (let item of map.entries()) {
          console.log(item[0], item[1]);
      }
      // "F" "no"
      // "T" "yes"
    
      // 或者
      for (let [key, value] of map.entries()) {
          console.log(key, value);
      }
      // "F" "no"
      // "T" "yes"
    
      // 等同于使用map.entries()
      for (let [key, value] of map) {
          console.log(key, value);
      }
      // "F" "no"
      // "T" "yes"
    
      map.forEach(function(value, key, map) {
          console.log("Key: %s, Value: %s", key, value);
      });
    
      //与其他数据结构的互相转换
      //1、map转数组
      const myMap = new Map()
          .set(true, 7)
          .set({foo: 3}, ['abc']);
      [...myMap]
      // [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]
    
      //2、数组转map
      new Map([
          [true, 7],
          [{foo: 3}, ['abc']]
      ])
      // Map {
      //   true => 7,
      //   Object {foo: 3} => ['abc']
      // }
      //3、Map 转为 JSON
      //一种情况是,Map 的键名都是字符串,这时可以选择转为对象 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}'
      //另一种情况是,Map 的键名有非字符串,这时可以选择转为数组 JSON。
      function mapToArrayJson(map) {
          return JSON.stringify([...map]);
      }
    
      let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']);
      mapToArrayJson(myMap)
      // '[[true,7],[{"foo":3},["abc"]]]'
    
        //4、JSON 转为 Map
        //JSON 转为 Map,正常情况下,所有键名都是字符串。
      function jsonToStrMap(jsonStr) {
          return objToStrMap(JSON.parse(jsonStr));
      }
    
      jsonToStrMap('{"yes": true, "no": false}')
      // Map {'yes' => true, 'no' => false}
    
        //但是,有一种特殊情况,整个 JSON 就是一个数组,且每个数组成员本身,又是一个有两个成员的数组。
      // 这时,它可以一一对应地转为 Map。这往往是 Map 转为数组 JSON 的逆操作。
      function jsonToMap(jsonStr) {
          return new Map(JSON.parse(jsonStr));
      }
    
      jsonToMap('[[true,7],[{"foo":3},["abc"]]]')
      // Map {true => 7, Object {foo: 3} => ['abc']}
    </script>

    2、set

    <script type="text/javascript">
       //Set 数据结构的使用
       //ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
       const s1 = new Set([1, 2, 3, 4, 4]);
       console.log(s1);
       const s2 = new Set([1, 2, 3, 4, 5, 5, 5, 5]);//不会重复,可用于数组去重
       console.log(s2.size) ;// 5
       let s3 = Array.from(new Set('abbccddeeee')).join(' ');//去重字符串
       console.log(s3); //a b c d e
    
        //常用方法
        let s4 = new Set();
        s4.add(1);//添加某个值,返回 Set 结构本身
        s4.size;//返回Set实例的成员总数
        s4.has(1);//返回一个布尔值,表示该值是否为Set的成员
        s4.delete(1);//删除某个值,返回一个布尔值,表示删除是否成功。
        s4.clear();//清除所有成员,没有返回值。
    
        //遍历
       let s5 = new Set(['red', 'green', 'blue']);
       for (let item of s5.keys()) {
           console.log(item);
       }
       // red
       // green
       // blue
    
       for (let item of s5.values()) {
           console.log(item);
       }
       // red
       // green
       // blue
    
       for (let item of s5.entries()) {
           console.log(item);
       }
       // ["red", "red"]
       // ["green", "green"]
       // ["blue", "blue"]
    
       s5.forEach((value, key) => console.log(key + ' : ' + value))//也可以forEach遍历
    
        //set转换数组
       let array = Array.from(s5).join(' ');
       console.log(array)
    
    
    </script>
  • 相关阅读:
    bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
    CentOS 7下MySQL安装配置
    CentOS 7下设置DNS服务器
    MySQL Table is marked as crashed 解决方法
    supervisor使用
    Linux更改服务器Hostname
    在Linux中让打印带颜色的字
    php安装gearman扩展实现异步分步式任务
    GitLab的Gravatar头像服务不可用
    Nginx + tornado + supervisor部署
  • 原文地址:https://www.cnblogs.com/jnba/p/12205188.html
Copyright © 2011-2022 走看看