Map
1.map的引入
- map的键值对的有序列表,键和值都可以为任意类型。
- 相较于object 字符串-值,object重在表示对象,map重在表达数据结构-字典
2.创建map
let m=new Map()
//初始化
let map=new Map([
['name','zhang'],
['sex','male']
])
3.map使用
let m=new Map();
let o={p:'hello'}
m.set(o,'content')
m//Map(1) {{…} => "content"}
m.size//1
m.get(o)//"content"
m.has(o)//true
4.map的特点
(1)当键是简单类型的值(数值,字符串,布尔值)只要两个值严格相等,map就认为是同一个键。
const mm = new Map();
mm.set("+0","hello")
mm.set(+0,"hello")
console.log(mm.get(-0))//"hello"
(2)当键是对象的引用时 只有对同一个对象的引用Map才认为是同一个键。
const mm = new Map();
mm.set(["a"], 5);
console.log(mm.get(["a"]));//undefined 因为这两个["a"]不是同一个对象的引用
const k1 = {};
const k2 = {};
mm.set(k1, 100);
mm.set(k2, 200);
console.log(mm.get(k1), mm.get(k2));//100 200
5.map的遍历
const map = new Map([
["F", "no"],
["T", "yes"]
]);
for (let [key, value] of map.entries()) {
console.log(key, value);
}//F no T yes
for (let [key, value] of map) {
console.log(key, value);
}F no T yes
6.map可以和其他数据进行转化
(1)map转化为数组
let map=new Map([
['name','zhang'],
['title','Author']
]);
console.log([...map])//[Array(2), Array(2)]0: (2) ["name", "zhang"]1: (2) ["title", "Author"]
(2)数组转化为map
let map=new Map([
['name','zhang'],
['title','Author']
]);
(3)map转化为对象
使用特殊函数
let map=new Map([
['name','zhang'],
['title','Author']
]);
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k, v] of strMap) {
obj[k] = v;
}
return obj;
}
let obj = strMapToObj(map);
(4)对象转化为map
使用特殊函数
(4)map转化为json
- map键名都是字符串的情况
先将map转化为对象,再将转化后的对象使用JSON.stringify()方法转化为json
- map键名有非字符串的情况
先将map转化为数组,再转化为json
(5)json转化为map
所有键名都是字符串的情况下
先将json转化为对象使用json.parse()方法
再将对象转化为map 见(4)
7.WeakMap