ES6学习笔记--Set与Map数据结构
何为Set和Map?
Set是一种叫做集合的数据结构
Map是一种叫做字典的数据结构
Set 基本用法
接受数组和类数组的对象作为参数
1.结构类似于数组,但是所有的成员的值都是唯一的,没有重复的值。
2.Set本身是一种构造函数,可以用new Set()来生成set数据结构
3.主要用于数组去重
Set方法:
操作方法
add(value):向set结构中加入成员,不会添加重复的值
delete(value):删除某个值,返回布尔值
has(value):返回布尔值,寻找set中是否有某个值
clear():清除所有值,没有返回值
遍历方法
keys():返回键名成员 //set没有键值和键名之分 所以keys和values返回值一样
values():返回键值成员
entries():返回键值对
forEach():使用回调函数遍历每个成员
- 并集
let union=new Set([...a,...b])
- 交集
let same=new Set([...a].filter(x=>b.has(x)))
- 差集
let cut=new Set([...a].filter(x=>!b.has(x)))
Map基本用法
1.主要用于存储数据,相比于obeject只提供“字符串-值”的对应,Map提供“值-值”对应
2.键是不能重复的,键绑定 的是内存地址,意思就是键的内存地址不能重复
Map的属性与方法
- size属性:返回Map结构的成员总数 如 let count=map.size
- set(key,value):设置或添加key所对应的键值,然后返回整个map
- get(key):读取key所对应的键值,找不到key则返回undefined
- has(key):返回一个布尔值,查询某个键是否在Map结构中
- delete(key):删除某个键,成功返回true,失败返回false
- celar():清除所有成员,没有返回值
Map的遍历
- keys():返回键名的遍历器
- vaules():返回键值的遍历器
- entries():返回所有成员的遍历器,可与解构配合
- forEach():返回Map的所有成员
类型转换
Map转为数组:
let map=new Map()
let arr=[...map]复制代码
数组转为Map:
map=new Map(arr)复制代码
Map转为对象:
let obj={}
for(let [k,v] of map){
obj[k]=v
}复制代码
对象转为Map:
for( let k of Object.keys(obj)){
map.set(k,obj[k])
}复制代码
Map转为Json:
Json.stringify(MaptoObj(map)) //键名为字符串
Json.stringify([...map]) //键名为数组复制代码
Json转为Map
ObjToMap(Json.parse(json))复制代码
WeakSet
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。
- WeakSet可以接受数组或者类数组对象作为参数,数组成员必须为对象否则会报错
- WeakSet中的对象是弱引用,垃圾回收机制不考虑WeakSet对该对象的引用。其它对象不引用该对象时,垃圾回收机制会自动回收该对象的内存。
WeakMap
WeakMap结构与Map结构类似,也是用于生成键值对的集合
Weakmap和map的区别有两点
- 只接受对象作为键名,不接受其它类型的值作为键名
- 没有遍历操作,无法清空
- weakMap键名所指的对象不计入垃圾回收机制
WeakMap应用:
1.Dom节点作为键名,监听函数放在键值。Dom节点消失,绑定的监听函数也自动小时
2.部署私有属性,删除实例,属性也随之消失,不会造成内存泄露