一:Map转数组
使用扩展运算符 ...
const map=new Map().set(true,7).set({foo:3},['adc']);
[...map] //转为数组
二:数组转Map
将数组传入Map函数,可以转换为Map
new Map([[true,7],[{foo:3},['abc']])
//Map{true=> 7,
Object{foo:3}=>['abc']
}
三:Map转为对象
如果所有的键都是字符串,他可以无损地转为对象
function strMapToObj(strMap){
let obj=Object.creat(null)
for(let [k,v] of strMap){
obj[k]=v
}
return obj
}
const myMap=new Map().set('yes',true).set('no',false);
strMapToObj(myMap)
//{yes:true,no:false}
四:对象转Map
function objToStrMap(obj){
let strMap=new Map();
for (let k of Object.keys(obj)){
strMap.set(k,obj[k]);
}
return strMap
}
objToStrMap({yes:true,no:false})
//Map('yes'=>true,"no"=>false)
五:Map 转为JSON
Map转为JSON要分情况
正常情况下,所有键名都是字符串。
function strMapToJson(map){
return JSON.stringify(strMapToObj(map));
}
let myMap=new Map().set('yes',true).set('no',false);
strMapToJson(myMap);
//{"yes":true,"no":false}
另一种情况是Map的键名有非字符串,这时可以选择转为数组JSON
function mapToArrayJson(map){
return JSON.stringify([...map])
}
let myMap=new Map.set(true,7).set({foo:3},['abc']);
mapToArrayJson(myMap);
//[[true,7],[{'foo':3},['abc']]]
6:JSON转Map
正常情况下,所有键名都是字符串
function jsontoStrMap(jsonStr){
return objToStrMap(JSON.parse(jsonStr));
}
jsonToStrMap('{"yes":true,"no":false}');
//Map('yes'=>true,'no'=>false)
还有另一种特殊情况,整个JSON就是个数组,且每个数组成员本身,又是一个有两个成员的数组,这时,他可以一一对应地转换为Map。这往往是转为数组的逆操作
function jsonToMap(jsonStr){
return new Map(JSON.parse(jsonStr))
}
jsonToMap('[[true,7],[{"foo":3},["abc"]]]');
//Map {true=>7,Object {foo:3}=>['abc']}
网友评论