美文网首页
Map与其他数据结构的互相转换

Map与其他数据结构的互相转换

作者: 曼珠沙华_521b | 来源:发表于2019-08-09 15:20 被阅读0次

一: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']}

相关文章

网友评论

      本文标题:Map与其他数据结构的互相转换

      本文链接:https://www.haomeiwen.com/subject/bxwcjctx.html