javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript的JSON处理Map

JavaScript的JSON处理Map的弊端详解

作者:堕落年代

这篇文章主要介绍了JavaScript的JSON处理Map的弊端,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

JavaScript的JSON处理Map的弊端

以下是详细分析及解决方法:

问题复现

// 示例代码
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
myMap.set('user2', { name: 'Bob' });

// 保存 Map
utilts.setValuePlan('myMap', myMap); // 实际存储的是空对象 `{}`

// 读取 Map
const loadedMap = utilts.getValuePlan('myMap'); 
console.log(loadedMap); // 输出 `{}`,数据丢失!

根本原因

解决方案(不修改存储函数)

方法 1:存储时手动转换 Map 为数组

在调用 setValuePlan 前将 Map 转换为数组,读取时再转回 Map

示例代码

// 保存 Map
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
myMap.set('user2', { name: 'Bob' });

// 转换为数组 [[key1, value1], [key2, value2]]
const mapArray = Array.from(myMap.entries());
utilts.setValuePlan('myMap', mapArray); // ✅ 正确存储

// 读取时转回 Map
const loadedArray = utilts.getValuePlan('myMap') || [];
const loadedMap = new Map(loadedArray); // ✅ 恢复为 Map

方法 2:封装工具函数

创建 Map 专用的存取函数,隐藏转换逻辑。

示例代码

// 保存 Map
export function setMapValue(key, map) {
  const mapArray = Array.from(map.entries());
  utilts.setValuePlan(key, mapArray);
}

// 读取 Map
export function getMapValue(key) {
  const mapArray = utilts.getValuePlan(key) || [];
  return new Map(mapArray);
}

// 使用示例
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
setMapValue('myMap', myMap); // ✅ 存储

const loadedMap = getMapValue('myMap'); // ✅ 恢复

关键总结

步骤操作代码示例
存储转换 Map 为数组utilts.setValuePlan(key, Array.from(map.entries()))
读取转换数组为 Mapnew Map(utilts.getValuePlan(key))

注意事项

const mapArray = utilts.getValuePlan(key) || [];

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文