我有一个像这样设置的地图
const directory = new Map()
.set('John', { age:25, gender: 'M'} )
.set('Mary', { age:51, gender: 'M'} )
.set('Sam', { age:15, gender: 'M', id: 322 } )
.set('Jane', { age:15, gender: 'M', paid: true } );
我希望将其转换为带有新属性的jsons数组" name"对于地图中的每个键:
[
{ "name": "John", "age":25, "gender": "M" },
{ "name": "Mary", "age":51, "gender": "F" },
{ "name": "Sam", "age":15, "gender": "M", "id": 322 },
{ "name": "Jane", "age":19, "gender": "F", "paid": true }
]
我尝试了JSON.stringify([...目录])和其他一些东西,但不确定将密钥作为json的一部分包含在内的任何有效方法。
答案 0 :(得分:2)
由于您已经使用spread属性来构造Map,因此您只需要将该2d数组映射到对象数组,这可以通过数组解构轻松完成:
[...directory].map(([name,obj]) => ({name,...obj}));
或没有ESnext:
[...directory].map(([name,obj]) => Object.assign({name},obj));
答案 1 :(得分:0)
您可以使用Array.from
并构建想要的对象。
const directory = new Map()
.set('John', { age: 25, gender: 'M' })
.set('Mary', { age: 51, gender: 'M' })
.set('Sam', { age: 15, gender: 'M', id: 322 })
.set('Jane', { age: 15, gender: 'M', paid: true }),
result = Array.from(directory, ([name, o]) => Object.assign({ name }, o));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }