如何在javascript中序列化地图?

时间:2018-05-03 10:47:19

标签: javascript

所以...在js中有一个名为Map的类型,它真的很好......它比一个对象更快迭代和计算,所以我真的很喜欢它。但是......你不能像对象一样传递地图。

我知道我可以将Map转换为JSON,但这样做成本很高,并且它首先忽略了使用Maps的重点。

JSON格式不适用于地图......它适用于对象。

所以......让我们从JSON格式转移一下。

我是否可以通过任何方式将Map序列化为字符串,以便我可以执行相反的操作 - 从所述序列化Map到最终得到Map

此方法最好与JSON.stringify或其对应JSON.parse一样容易。

我想使用Map因为它更快更好但我需要将数据作为字符串发送。只要我可以将其解析回Map

,字符串的格式就不重要了

1 个答案:

答案 0 :(得分:2)

我想地图/词典的重点是你可以使用对象作为键,所以:

let a = {}, b = {}, m = new Map();

m.set(a,b);
m.get(a); // b

因为b上有参考,所以您获得了a。让我们假设您通过创建数组数组来序列化Map,并将其字符串化为json:

function serialize (map) {
  return JSON.stringify([...map.entries()])
}

let s = serialize(m); // '[[{}, {}]]'
                      // '[[<key>, <val>], … ]'

比你可能:

let m2 = JSON.parse(s).reduce((m, [key, val])=> m.set(key, val) , new Map());

但现在的问题是:如何获取某个密钥?由于没有任何引用,由于所有对象都已被字符串化并重新创建,因此无法查询专用钥匙。

所有这一切只适用于String键,但这确实占据了地图的大部分功能,或者换句话说,将它们简化为简单的对象,这就是地图实现的原因。