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