一:Map轉(zhuǎn)數(shù)組
使用擴展運算符 ...
const map=new Map().set(true,7).set({foo:3},['adc']);
[...map] //轉(zhuǎn)為數(shù)組
二:數(shù)組轉(zhuǎn)Map
將數(shù)組傳入Map函數(shù)幅狮,可以轉(zhuǎn)換為Map
new Map([[true,7],[{foo:3}锐想,['abc']])
//Map{true=> 7,
Object{foo:3}=>['abc']
}
三:Map轉(zhuǎn)為對象
如果所有的鍵都是字符串亮靴,他可以無損地轉(zhuǎn)為對象
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}
四:對象轉(zhuǎn)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 轉(zhuǎn)為JSON
Map轉(zhuǎn)為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的鍵名有非字符串夜郁,這時可以選擇轉(zhuǎn)為數(shù)組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轉(zhuǎn)Map
正常情況下儒将,所有鍵名都是字符串
function jsontoStrMap(jsonStr){
return objToStrMap(JSON.parse(jsonStr));
}
jsonToStrMap('{"yes":true,"no":false}');
//Map('yes'=>true,'no'=>false)
還有另一種特殊情況,整個JSON就是個數(shù)組捺宗,且每個數(shù)組成員本身柱蟀,又是一個有兩個成員的數(shù)組,這時偿凭,他可以一一對應地轉(zhuǎn)換為Map产弹。這往往是轉(zhuǎn)為數(shù)組的逆操作
function jsonToMap(jsonStr){
return new Map(JSON.parse(jsonStr))
}
jsonToMap('[[true,7],[{"foo":3},["abc"]]]');
//Map {true=>7,Object {foo:3}=>['abc']}