文章目录
  1. 1. Map转为Array
  2. 2. Array转为Map
  3. 3. Map转为Object
  4. 4. Object转为Map
  5. 5. Map转为JSON
    1. 5.1. Map转为对象JSON
    2. 5.2. Map转为数组JSON
  6. 6. JSON转为Map
    1. 6.1. JSON键名是字符串
    2. 6.2. JSON数组

本文介绍 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"]}

本文完!

文章目录
  1. 1. Map转为Array
  2. 2. Array转为Map
  3. 3. Map转为Object
  4. 4. Object转为Map
  5. 5. Map转为JSON
    1. 5.1. Map转为对象JSON
    2. 5.2. Map转为数组JSON
  6. 6. JSON转为Map
    1. 6.1. JSON键名是字符串
    2. 6.2. JSON数组