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
let map = new Map()
map.set('age', 18)
.set('sex', 'woman')
let mapToarr = [...map]
let arrTomap = new Map(mapToarr)
let map = new map()
map.set('age', 18)
.set('sex', 'woman')
.set('college', '清华daxue')
function mapToObj(mapdata) {
let obj = Object.create(null)
fot(let [key, value] of mapdata.entries()) {
Reflect.set(obj, key, value)
}
return obj
}
let mapObj = mapToObf(map)
function objTomap(obj) {
let map = new Map()
for (let [key, value] of obj) {
map.set(key, value)
}
return map
}
objTomap(mapToObj)
let map = new Map()
map.set('age', 18)
.set('sex', 'woman')
// map -》JsonStr
function mapToJsonOne(mapdata) {
let obj = Object.create(null)
for (let [key, value] of mapdata) {
Reflect.set(key, value)
}
return JSON.stringfiy(obj)
}
let str1 = mapToJsonOne(map)
function mapToJsonTwo(mapdata) {
let arr = [...mapdata]
return JSON.stringify(arr)
}
let str2 = mapToJsonTwo(map)
function jsonToMapOne(jsonstr) {
let map = new Map()
for (let [key, value] of JSON.parse(jsonstr)) {
map.set(key, value)
}
return map
}
jsonToMapOne(str1)
function jsonToMapTwo(jsonArr) {
let arr = JSON.parse(jsonArr)
let map = new Map(arr)
return map
}
jsonToMapTwo(str2)
WeakMap
与map的区别
- 只接受对象作为键名
- WeakMap的键名所引用的对象都是弱类型,即垃圾回收机制会自动释放该对象所占用的内存。
- 没有size 属性, 不可遍历
四个可用方法
get()
set()
has()
delete()
使用场景
weakMap 把DOM 节点作为键名
weakMap 用来部署私有属性