Map

本质

Map 数据结构类似对象,也是键值对的集合。

Object =》 键(只能是字符串)值对 =》 字符串 - 值
Map => 键(任意类型的值)值对 =》 值 - 值

属性

size 属性返回Map结构的成员总数

操作方法

set(key, value)
get(key)
has(key)
delete(key)
clear()

遍历方法

map.keys()
map.values()
map.entries()
forEach()

与其它数据的相互转换

map 转 数组
数组 转 map
map 转 对象
对象 转 map
map 转 JSON
JSON 转 map

  1. let map = new Map()
  2. map.set('age', 18)
  3. .set('sex', 'woman')
  4. let mapToarr = [...map]
  5. let arrTomap = new Map(mapToarr)
  1. let map = new map()
  2. map.set('age', 18)
  3. .set('sex', 'woman')
  4. .set('college', '清华daxue')
  5. function mapToObj(mapdata) {
  6. let obj = Object.create(null)
  7. fot(let [key, value] of mapdata.entries()) {
  8. Reflect.set(obj, key, value)
  9. }
  10. return obj
  11. }
  12. let mapObj = mapToObf(map)
  13. function objTomap(obj) {
  14. let map = new Map()
  15. for (let [key, value] of obj) {
  16. map.set(key, value)
  17. }
  18. return map
  19. }
  20. objTomap(mapToObj)
  1. let map = new Map()
  2. map.set('age', 18)
  3. .set('sex', 'woman')
  4. // map -》JsonStr
  5. function mapToJsonOne(mapdata) {
  6. let obj = Object.create(null)
  7. for (let [key, value] of mapdata) {
  8. Reflect.set(key, value)
  9. }
  10. return JSON.stringfiy(obj)
  11. }
  12. let str1 = mapToJsonOne(map)
  13. function mapToJsonTwo(mapdata) {
  14. let arr = [...mapdata]
  15. return JSON.stringify(arr)
  16. }
  17. let str2 = mapToJsonTwo(map)
  18. function jsonToMapOne(jsonstr) {
  19. let map = new Map()
  20. for (let [key, value] of JSON.parse(jsonstr)) {
  21. map.set(key, value)
  22. }
  23. return map
  24. }
  25. jsonToMapOne(str1)
  26. function jsonToMapTwo(jsonArr) {
  27. let arr = JSON.parse(jsonArr)
  28. let map = new Map(arr)
  29. return map
  30. }
  31. jsonToMapTwo(str2)

WeakMap

与map的区别

  1. 只接受对象作为键名
  2. WeakMap的键名所引用的对象都是弱类型,即垃圾回收机制会自动释放该对象所占用的内存。
  3. 没有size 属性, 不可遍历

四个可用方法

get()
set()
has()
delete()

使用场景

weakMap 把DOM 节点作为键名
weakMap 用来部署私有属性