By
yk
更新日期:
本文介绍 Map与Array,Object,JSON之间的相互转换
Map转为Array
Map转为Array,直接使用es6引入的扩展运算符(…)。
1 2 3
| let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']); console.log(myMap); // Map {true => 7, Object {foo: 3} => ['abc']} console.log([...myMap]); // [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]
|
Array转为Map
将Array转入Map构造函数,就可以转为Map。
1 2
| let myMap = new Map([[true, 7], [{foo: 3}, ['abc']]]) console.log(myMap); // Map {true => 7, Object {foo: 3} => ['abc']}
|
Map转为Object
如果所有Map的键都是字符串,它可以转为Object。
1 2 3 4 5 6 7 8 9 10 11 12 13
| 方法: function strMapToObj(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return obj; } 使用: let myMap = new Map().set('yes', true).set('no', false); console.log(myMap); // Map {"yes" => true, "no" => false} let obj = strMapToObj(myMap); console.log(obj); // Object {yes: true, no: false}
|
Object转为Map
1 2 3 4 5 6 7 8 9 10 11
| function objToStrMap(obj) { let strMap = new Map(); for (let k of Object.keys(obj)) { strMap.set(k, obj[k]); } return strMap; } let obj = {yes: true, no: false}; console.log(obj); // Object {yes: true, no: false} let myMap = objToStrMap(obj); console.log(myMap); // Map {"yes" => true, "no" => false}
|
Map转为JSON
Map转为JSON要区分两种情况。一种情况是,Map的键名都是字符串,这时可以选择转为对象JSON.
另一种情况是,Map的键名有非字符串,这时可以选择转为数组JSON。
Map转为对象JSON
1 2 3 4 5 6 7 8 9 10 11
| function strMapToJson(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return JSON.stringify(obj); } let myMap = new Map().set('yes', true).set('no', false); console.log(myMap); // Map {"yes" => true, "no" => false} let objJson = strMapToJson(myMap); console.log(objJson); // {"yes":true,"no":false}
|
Map转为数组JSON
1 2 3 4 5 6 7
| function mapToArrayJson(map) { return JSON.stringify([...map]); } let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']); console.log(myMap); // Map {true => 7, Object {foo: 3} => ["abc"]} let arrJson = mapToArrayJson(myMap); console.log(arrJson); // [[true,7],[{"foo":3},["abc"]]]
|
JSON转为Map
JSON转为Map,正常情况下,所有键名都是字符串。
但是,有一种特殊情况,整个JSON就是一个数组,且每个数组成员本身,又是一个有两个成员的数组。这时,它可以一一对应地转为Map。这往往是数组转为JSON的逆操作。
JSON键名是字符串
1 2 3 4 5 6 7 8 9 10 11 12
| function jsonToStrMap(jsonStr) { let obj = JSON.parse(jsonStr); let strMap = new Map(); for (let k of Object.keys(obj)) { strMap.set(k, obj[k]); } return strMap; } let strJson = '{"yes":true,"no":false}'; console.log(strJson); // {"yes":true,"no":false} let myMap = jsonToStrMap(strJson); console.log(myMap); // Map {"yes" => true, "no" => false}
|
JSON数组
1 2 3 4 5 6 7
| function jsonToMap(jsonStr) { return new Map(JSON.parse(jsonStr)); } let arrJson = '[[true,7],[{"foo":3},["abc"]]]'; console.log(arrJson); // [[true,7],[{"foo":3},["abc"]]] let myMap = jsonToMap(arrJson); console.log(myMap); // Map {true => 7, Object {foo: 3} => ["abc"]}
|
本文完!