用js的Map的時(shí)候發(fā)現(xiàn)了里面的一個(gè)小坑(也許是Java的慣性思維)蘑辑,在將Map轉(zhuǎn)成字符串的時(shí)候會(huì)以數(shù)組字面量的形式保存条获。
先構(gòu)造一個(gè)Map娃承,如下
const map = new Map();
map.set(1, 1);
map.set(2, 2);
console.log(map);
結(jié)果如圖:
好的北苟,沒問題桩匪,當(dāng)做如下轉(zhuǎn)換:
console.log(JSON.parse(JSON.stringify(map)));
結(jié)果意外發(fā)生了
這個(gè)Map變成了一個(gè)二維數(shù)組打瘪,(
key
對(duì)應(yīng)下標(biāo)0友鼻,value
對(duì)應(yīng)下標(biāo)1)傻昙。那么如何還原為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]);//注意這里取的是下標(biāo)0和1
}
console.log(map);
2.構(gòu)造器
翻看es6手冊(cè)發(fā)現(xiàn)其構(gòu)造函數(shù)可以接受一個(gè)二維數(shù)組作為參數(shù)妆档,該數(shù)組的成員是表示鍵值對(duì)的數(shù)組,這正是我們想要的方式虫碉。因此贾惦,可以這樣去構(gòu)造Map:
let jsonStr = '[[1,1],[2,2]]';
const map = new Map(JSON.parse(jsonStr));
console.log(map);
輸出結(jié)果如下:
兩種方式都可以得到我們想要的結(jié)果。
參考文檔:阮一峰 ECMAScript 6 入門;