zoukankan      html  css  js  c++  java
  • ES6 学习(12) --- Set 和 Map 数据结构

    1、Set

      ES6 新增加的一种数据结构,类似于数组但是它中的值是唯一的,没有重复的值。

      生成Set数据,Set本身就是构造函数,使用 new Set() 来生成;

      使用 Set.prototype.add( value ) 添加数据;返回 Set 数据

      使用 Set.prototype.delete( value ) 删除指定数据;返回布尔值

      使用 Set.prototype.has( value ) 来判断数据中是否包含指定的值;返回布尔值

      使用 Set.prototype.clear() 来清楚所有成员;无返回值

      Set.prototype.size  返回Set数据成员总数

      Set 实例的遍历

        Set.prototype.keys()  // Set 可以理解为键值与键名同值

        Set.prototype.values()

        Set.prototype.entries() 

        Set.prototype.forEach() 

      应用: 数组去重,

    1 let arr = [ 1, 2, 1, 2, '1']
    2 let set = new Set(arr) // 转换成Set数据达到去重效果
    3 arr = [...set] // 将 Set 数据转换成 数组

    2、Map

      传统的Object对象键名只能是字符串,ES6新增的Map数据结构,使得键名不只是字符串,还可以使各类型的值都能是键名;Object 提供的是 ‘字符串-值’的对应,而Map数据提供的是 ‘值-值’的对应

      创建Map数据: new Map()

      Map.prototype.size // 返回 Map数据成员的总数

      Map.prototype.set( key, value ) // 设置Map数据成员;key作为键名有对应的值就更新键值,否则就会新建;set 方法返回的是当前的 Map数据因此可以使用链式调用

    let map = new Map().set(1, 'a').set(2, 'b').set(3, 'c');

      Map.prototype.get( key ) // 获取 key 对应的键值, 没有就返回 undefined

        需要注意的是:

    let mp = new Map()
    let obj = {a:1}
    mp.set(obj,1)
    
    mp.get(obj) != mp.get({a:1})
    // 1                    undefined     // 对象作为键名时存储位置不同

      Map.prototype.has(key) // 判断某个键名是否在Map数据中

      Map.prototype.delete(key) // 删除某个键名 失败返回 false 成功返回 true

      Map.prototype.clear() // 清空Map数据

      遍历方法同Set数据

      Map数据转成为其他数据

      1、Map转换成数组

    1 // 使用 ... 扩展符
    2 const myMap = new Map()
    3   .set(undefined, 7)
    4   .set({str: 3}, ['abc']);
    5 [...myMap]
    6 // [ [ undefined, 7 ], [ { str: 3 }, [ 'abc' ] ] ]

      2、数组转成Map

    1 // 将数组传入 Map 构造函数,就可以转为 Map。
    2 new Map([
    3   [undefined, 7],
    4   [{str: 3}, ['abcd']]
    5 ])
    6 // Map {
    7 //   undefined => 7,
    8 //   Object {str: 3} => ['abcd']
    9 // }

     

      3、Map转换成对象

        1、如果Map对象的键名均是字符串,那么就会无损的转化成对象

        2、如果Map对象的键名不全是字符串,那么就会强制将键名转换成字符串,然后转化成对象。

      4、对象转换成Map

        对象转换成Map 可以通过 Object.entries() 的方法

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

      5、 Map 转 JSON

        1、如果Map对象的键名均是字符串,那么可以先转换成对象再 使用 JSON.stringify()转换;

        2、如果Map对象的键名不全是字符串,可以先转换成数组在转换成 JSON

      6、 JSON 转 Map

        1、一般情况下,JSON 的键名都是字符串,那么就先转换成对象然后转 Map

        2、 如果JSON是个数组,且每个数组成员又是由两个成员组成的数组,那么就可以先 JSON.parse() 转换,然后new Map() 转换成Map

  • 相关阅读:
    联赛模拟测试19
    联考Day5
    联赛模拟测试18(A.施工未补)
    题解 CF960G 【Bandit Blues】
    题解 P5518 【[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题】
    概率与数学期望笔记
    题解 P3704 【[SDOI2017]数字表格】
    主定理
    【题解】Hikari与组合数
    【题解】P2303 [SDOI2012] Longge 的问题
  • 原文地址:https://www.cnblogs.com/newttt/p/12845778.html
Copyright © 2011-2022 走看看