2017-10-14 21 views
1

序列化映射對象[這是第一個問題上如此,所以我道歉對任何錯誤]與jQuery/JS

我想保存地圖,像下面的一個,在Cookie中。

var myMap = new Map(); 
myMap.set("k1", { 
    a1: "...", 
    a2: "...", 
    a3: "..." 
}); 

爲此,我必須格式化爲JSON。我試過很多方法,如:

$.toJSON(myMap) 
$.param(myMap) 
JSON.stringify(myMap) 

但他們都不似乎工作...

所以,我這樣做:

var serial = []; 
myMap.forEach(function(value){ 
    serial.push(value); 
}); 
var result = $.toJSON(serial) 

(有重建的解碼關鍵JSON ...)

有更好的方法來序列化一個Map對象嗎?

回答

1

不完全是一個典型的「字符串」,但您可以使用蔓延運營商JSON.stringify()相結合,會給你一個數組...

var myMap = new Map(); 
myMap.set("k1", { a1: "...", a2: "...", a3: "..." }); 
myMap.set("k2", { b1: "...", b2: "...", b3: "..." }); 

var myJSON = JSON.stringify([...myMap]); 
alert(myJSON); 

這會給你...

[["k1",{"a1":"...","a2":"...","a3":"..."}],["k2",{"b1":"...","b2":"...","b3":"..."}]] 

並把它轉換再次地圖...

var recoveredMap = new Map(JSON.parse(myJSON)); 
+0

尼斯,非常感謝! –

+0

這很好用,但舊版瀏覽器不支持。檢查[這裏](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)以獲得兼容性。 –