含义和基本用法
Map结构类似于对象,也是键值对的集合,但是键的访问不仅限于字符串,各种类型的值(包括对象)都可以当作键。
Map函数是Map数据结构的构造函数,可以通过new方法创建map数据结构
Map函数可以接受一个数组(任何具有Iterator接口的数据都可以)作为参数,数组的成员是一个个表示键值对的数组
//情景1:参数为空
let map1=new Map() // map {}
//情景2:参数为数组
let map2=new map([['num1',1],['num2',2]]) //map2 {'num1'=>1,'num2'=>2}
//情景3:参数为Set数据结构
let set1=new Set(['name',1]);
let map3=new Map([set1]) //map3 {'name'=>1}
let set2=new Set([['name',2]]);
let map4=new Map(set2); //map4 {'name'=>2}
实例属性和操作方法
1、size属性 :返回map结构的成员总数
let map=new Map([['name1',1],['name2',2]]);
map.size //2
2、set(key,value): 设置键名key对应的键值为value,然后返回整个Map结构,可以采用链式写法
如果对同一个键重复赋值,后面的值会覆盖前面的值
let map1=new Map();
map1.set('name1',1).set('name2',2) //map {'name1'=>1,'name2'=>2}l;
let map2=new Map();
map2.set('name',1).set('name',2) //map {'name'=>2}
3、get(key) :读取键名key对应的键值,找不到返回undefined\
let arr=[]
let map=new Map([[arr,1]])
map.get(arr) //1
map.get([]) //undefined
4、has(key):返回一个布尔值,表示某个键是否在当前 Map 对象之中
let arr=[]
let map=new Map([[arr,1]])
map.has(arr) //true
map.has([]) //false
5、delete(key):删除某个键,返回true
。如果删除失败,返回false
let arr=[]
let map=new Map([[arr,1]])
map.delete(arr) //true
map.delete([]) //false
6、clear():清除所有成员,没有返回值。
7、keys():返回键名的遍历器。
8、values():返回键值的遍历器。
9、entries():返回所有成员的遍历器
10、forEach():遍历 Map 的所有成员。
注意:Map 的遍历顺序就是插入顺序
let map=map.set('a',1).set('b',2)
map.keys() // MapIterator {"a", "b"}
map.values() // MapIterator {1, 2}
map.entries() // MapIterator {"a" => 1, "b" => 2}
Map与其他数据的转换
1、Map转数组
拓展运算符、Array.of()、Array.from()
let map=new Map([[true,1],[[],2],[123]]);
//map Map(3) {true => 1, Array(0) => 2, 123 => undefined}
// ... 扩展运算符
let arr1=[...map]
//arr1=[[true,1],[[],2],[123,undefined]]
//Array.of与...拓展运算符结合使用
let arr2=Array.of(...map)
//Array.from()
let arr3=Array.from(map)
2、数组转Map
let map=new Map([[true,1],[[],1]])
let arr1=['foo',1]
let arr2=[true,2]
let map2=new Map().set(...arr1).set(...arr2)
3、Map转对象
let map=new Map().set('name','lilei').set('age',13);
let obj= Object.create(null)
for(let [key,value] of map){
obj[key]=value
}
4,、对象转Map
let obj={name:'lilei'.age:13};
let map=new Map()
for(let (key,value) of obj){
map.set(key,value)
}
5、Map转json
情形1:Map 的键名都是字符串,先转对象,再转json
情形2:Map 的键名有非字符串,这时可以选择转为数组 json。
let map=new Map([[true,1]])
let json=JSON.stringify([...map])
6、json转Map
JSON 转为 Map,正常情况下,所有键名都是字符串。
可以使用JSON.parse方法转为正常的对象或者数组,然后转为Map