所以...在js中有一个名为Map
的类型,它真的很好......它比一个对象更快迭代和计算,所以我真的很喜欢它。但是......你不能像对象一样传递地图。
我知道我可以将Map转换为JSON,但这样做成本很高,并且它首先忽略了使用Maps的重点。
JSON格式不适用于地图......它适用于对象。
所以......让我们从JSON格式转移一下。
我是否可以通过任何方式将Map
序列化为字符串,以便我可以执行相反的操作 - 从所述序列化Map
到最终得到Map
此方法最好与JSON.stringify
或其对应JSON.parse
一样容易。
我想使用Map
因为它更快更好但我需要将数据作为字符串发送。只要我可以将其解析回Map
答案 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键,但这确实占据了地图的大部分功能,或者换句话说,将它们简化为简单的对象,这就是地图实现的原因。