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

原文地址:https://www.cnblogs.com/newttt/p/12845778.html