2016-11-28 60 views
2

我使用core-js的地圖收藏,因爲它似乎ES7Map有地圖JSON功能,它不ES6Map存在。ES7地圖JSON加方括號

(ES6): JSON.stringify(new Map().set('myKey1', 'val123').set('myKey2', 'val456')); => {} 

儘管ES 7似乎不必要的方括號中添加鍵值對

Eg (ES7): JSON.stringify(new Map().set('myKey1', 'val123').set('myKey2', 'val456')); => [["myKey1","val123"],["myKey2","val456"]] 

的時候我會想到這個代替:

{"myKey1": "val123","myKey2":"val456"} 

請幫幫忙!

編輯: 我意識到我發佈了一個糟糕的JSON,但這只是寫入錯誤時寫的問題。

的一點是,東陽我使用打字稿創建一個新的Map鍵值對像

new Map<string, string>() 

我希望這樣一個地圖的JSON輸出爲{"myKey1": "val123","myKey2":"val456"},所以我會請問如何獲得理想的結果。

+3

'{ 「myKey1」, 「val123」, 「myKey2」, 「val456」}'無效的JSON。 – Quentin

+1

您的輸出無效JSON。對象('{}')需要遵循'key:value'格式。 ES7輸出是序列化Map的唯一方式:As鍵可以是任意對象,序列化也可以任意嵌套。所以一個單純的字符串鍵不會在這裏工作,而是他們去''[key,value]'格式。 – Sirko

+0

我不明白你的問題是什麼。你唯一一次使用問號是在事實陳述之後。 – Quentin

回答

3

這是因爲默認映射迭代器是.entries,它產生鍵值對。如果你想使用另一種迭代器,你必須提供或計劃它,例如:

function *flatEntries(map) { 
 
    for (let [k, v] of map) { 
 
     yield k; 
 
     yield v; 
 
    } 
 
} 
 

 

 
let m = new Map().set('myKey1', 'val123').set('myKey2', 'val456'); 
 
let s = JSON.stringify([...flatEntries(m)]); 
 

 
console.log(s)