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

全部评论

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务