一尘不染

如何在本地存储(或其他位置)中保存ES6映射?

json

var a = new Map([[ 'a', 1 ]]);
a.get('a') // 1

var forStorageSomewhere = JSON.stringify(a);
// Store, in my case, in localStorage.

// Later:
var a = JSON.parse(forStorageSomewhere);
a.get('a') // TypeError: undefined is not a function

不幸的是,JSON.stringify(a);简单地返回’{}’,这意味着a在还原后变成空对象。

我发现es6-mapify允许在Map和普通对象之间进行上/下转换,所以这可能是一种解决方案,但是我希望我仅需要使用外部依赖项来持久保存我的地图。


阅读 236

收藏
2020-07-27

共1个答案

一尘不染

假设您的键和值都是可序列化的,

localStorage.myMap = JSON.stringify(Array.from(map.entries()));

应该管用。反之,使用

map = new Map(JSON.parse(localStorage.myMap));
2020-07-27