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.部署私有属性,删除实例,属性也随之消失,不会造成内存泄露

全部评论

相关推荐

新记话事人:你就和她说去抖音了
点赞 评论 收藏
分享
2024-12-23 06:50
门头沟学院 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务