sessionstorage存map
时间: 2023-09-07 22:15:06 浏览: 219
SessionStorage 中只能存储字符串类型的数据,因此需要将 Map 转换为字符串再存储。可以使用 JSON.stringify() 方法将 Map 转换为 JSON 字符串,然后使用 SessionStorage.setItem() 方法将字符串存储到 SessionStorage 中。
示例代码如下:
```javascript
// 创建一个 Map
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
// 将 Map 转换为 JSON 字符串并存储到 SessionStorage 中
const jsonString = JSON.stringify([...myMap]);
window.sessionStorage.setItem('myMap', jsonString);
// 从 SessionStorage 中读取 JSON 字符串并将其转换为 Map
const storedJsonString = window.sessionStorage.getItem('myMap');
const storedEntries = JSON.parse(storedJsonString);
const storedMap = new Map(storedEntries);
```
需要注意的是,如果 Map 中的值不是基本类型,而是对象、数组等复杂类型,则需要对这些值单独进行转换。同时,如果 Map 中的键不是字符串类型,则需要在转换为 JSON 字符串时指定键的转换方式。例如,可以将键和值都转换为字符串类型,然后存储到数组中。示例代码如下:
```javascript
const myMap = new Map();
myMap.set({ name: 'Alice' }, [1, 2, 3]);
const jsonString = JSON.stringify([...myMap], (key, value) => [key.toString(), value]);
window.sessionStorage.setItem('myMap', jsonString);
const storedJsonString = window.sessionStorage.getItem('myMap');
const storedEntries = JSON.parse(storedJsonString, (key, value) => [JSON.parse(key), value]);
const storedMap = new Map(storedEntries);
```
在解析 JSON 字符串时,需要使用一个 reviver 函数将键和值恢复为原来的类型。该函数接受两个参数,分别是当前正在处理的键和值。在本例中,我们将键解析为对象类型,将值保持不变。
阅读全文