JSON.stringify() 和 ES6 Maps
ES6 Maps 提供了 JavaScript 对象的强大替代方案,但使用 JSON.stringify( 序列化它们)可能具有挑战性。为了克服这个障碍,您可以利用 JSON.stringify() 中的 Replacer 函数及其 JSON.parse() 中的对应 reviver。
带有替换器的自定义序列化
Replacer 函数允许您自定义对象的序列化方式。在这种情况下,您可以修改它来处理 Map 对象:
function replacer(key, value) { if(value instanceof Map) { return { dataType: 'Map', value: Array.from(value.entries()), // or with spread: value: [...value] }; } else { return value; } }
使用 reviver 进行自定义反序列化
同样,reviver 函数允许您更改对象的反序列化方式。您可以使用它来恢复 Map 对象:
function reviver(key, value) { if(typeof value === 'object' && value !== null) { if (value.dataType === 'Map') { return new Map(value.value); } } return value; }
用法
定义这些函数后,您现在可以有效地使用 JSON.stringify() 和 JSON.parse( ) Map 对象:
const originalValue = new Map([['a', 1]]); const str = JSON.stringify(originalValue, replacer); const newValue = JSON.parse(str, reviver); console.log(originalValue, newValue);
深度嵌套
提供的解决方案支持数组、对象和 Map 的深度嵌套,如下所示:
const originalValue = [ new Map([['a', { b: { c: new Map([['d', 'text']]) } }]]) ]; const str = JSON.stringify(originalValue, replacer); const newValue = JSON.parse(str, reviver); console.log(originalValue, newValue);
以上是如何使用 JSON.stringify() 和 JSON.parse() 序列化和反序列化 ES6 映射?的详细内容。更多信息请关注PHP中文网其他相关文章!