2016-11-28 32 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)