用js的Map的时候发现了里面的一个小坑(也许是Java的惯性思维),在将Map转成字符串的时候会以数组字面量的形式保存。 先构造一个Map,如下
const map = new Map();map.set(1, 1);map.set(2, 2);console.log(map);复制代码
结果如图:
console.log(JSON.parse(JSON.stringify(map)));复制代码
结果意外发生了
key
对应下标0, value
对应下标1)。 什么鬼?为什么不是我想要的Map了?还想要用Map来取数据怎么办? 方法有二: 1.遍历
当然,这是一种比较傻的方式,代码如下:
const map = new Map();let jsonStr = '[[1,1],[2,2]]';let values = JSON.parse(jsonStr);for (let i in values) { map.set(values[i][0], values[i][1]);//注意这里取的是下标0和1}console.log(map);复制代码
2.构造器
翻看es6手册发现其构造函数可以接受一个二维数组作为参数,该数组的成员是表示键值对的数组,这正是我们想要的方式。因此,可以这样去构造Map:
let jsonStr = '[[1,1],[2,2]]';const map = new Map(JSON.parse(jsonStr));console.log(map);复制代码
输出结果如下:
参考文档:阮一峰 ;