我如何在Chrome应用程序中存储地图对象
How can I store a Map object in a Chrome App?
使用Chrome API Chrome .storage。在本地,我可以保存并成功检索数组,但不能检索Map对象。
var folders = new Map()
//... populate Map
chrome.storage.local.set( { "myFolders": folders } )
chrome.storage.local.get( "myFolders", function ( saved )
{
console.assert( typeof saved.myFolders.size === 'number', "not a Map!" )
} )
我被迫在存储之前转换Map in Array。可以直接存储Map对象吗?
不,您不能存储或传递消息传递不可json序列化的对象(DOM节点是另一个常见的例子)。
且a Map
不为
> JSON.stringify(new Map().set("a", "b"))
"{}"
因此,您只能存储JSON可以编码的内容。这意味着你必须在存储访问的基础上做你自己的序列化/反序列化。
编辑:正如Simon的回答所示,Chrome执行比JSON更精细的序列化(保留RegExp和Date),但原则仍然有效:非基本对象需要自定义序列化。
不能JSON。对Map进行字符串化,这样它就不会像预期的那样开箱即用。然而,问题是"如何"。这里是:
var folders = new Map()
//... populate Map
// save
chrome.storage.local.set(
{ "myFolders": Object.fromEntries(folders) }
)
// load
chrome.storage.local.get( "myFolders",
function(saved){
folders = new Map(Object.entries(result.myFolders));
console.log(folders);
}
)
请记住API是异步的,因此folders
将在chrome.storage.local.get
调用结束后加载。
查看文档:
原始值(如数字)将按预期序列化。值对于"object"类型,"function"通常会序列化为{},除了Array(按预期序列化)、Date和Regex(使用它们的字符串表示进行序列化)。
因此,如果不转换数据,就不能直接这样做
相关文章:
- 我的地图数据's不会使用php存储在mysql数据库中
- 使用谷歌地图和Angular JS.正在尝试将坐标存储在变量中
- 如何在外部文件中存储谷歌地图选项
- 谷歌地图 API 中的存储标记和中心地图
- 使用本地存储绘制谷歌地图
- 如何在文件中存储带有所需位置标记的地图
- 将谷歌地图 api latLng 坐标存储到 js 数组
- 使用存储在App_Data中的Json数据,使用JavaScript和ASP.NET MVC在谷歌地图视图上显示
- 存储谷歌地图标记并从中选择特定标记
- 为标记添加唯一的信息窗口,并更新数据库以存储信息(谷歌地图api)
- JavaScript谷歌地图API如何将位置lat/long存储到全局变量
- 谷歌地图api V3存储输入
- 存储完整的谷歌地图路线
- 谷歌地图和存储地址在mysql数据库半径搜索相似
- 如何存储整个谷歌地图路线在数据库
- 在数组中存储谷歌地图标记
- Google map:显示以下教程的错误,用于存储地理代码结果并回调它们以创建地图
- 存储谷歌地图标记信息
- 我如何在Chrome应用程序中存储地图对象
- Javascript:存储地图数据的最佳方式