码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-25 10:39:05      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:ret   key   creat   json   扩展   string   asc   ring   运算符   

Map 转为数组

const myMap = new Map()
  .set(true, 7)
  .set({foo: 3}, [‘abc‘]);
[...myMap]  // 使用扩展运算符(...
// [ [ true, 7 ], [ { foo: 3 }, [ ‘abc‘ ] ] ] 

数组 转为 Map  

new Map([
  [true, 7],
  [{foo: 3}, [‘abc‘]]
])
// Map {
//   true => 7,
//   Object {foo: 3} => [‘abc‘]
// }

Map 转为对象  

function strMapToObj(strMap) {
  let obj = Object.create(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 

let obj = {"a":1, "b":2};
let map = new Map(Object.entries(obj));
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(strMap) {
  return JSON.stringify(strMapToObj(strMap));
}

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"]]]‘

JSON 转为 Map 

function jsonToStrMap(jsonStr) {
  return objToStrMap(JSON.parse(jsonStr));
}

jsonToStrMap(‘{"yes": true, "no": false}‘)
// Map {‘yes‘ => true, ‘no‘ => false}

  

 

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

标签:ret   key   creat   json   扩展   string   asc   ring   运算符   

原文地址:https://www.cnblogs.com/blogZhao/p/12564215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!