2017-09-18 2 views
0

Ich habe eine Karte, die wie diesesKonvertieren es6 Karte Inhalt auf ein Array von JSON

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 }); 

Ich wünsche eingerichtet ist, diese mit einer neuen Eigenschaft „name“ von jsons auf ein Array zu verwandeln für jede der Schlüssel aus der Karte:

[ 
    { "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 } 
] 

ich versuchte JSON.stringify ([... Verzeichnis]) und paar andere Sachen, aber die nicht sicher jeder effiziente Art und Weise den Schlüssel als Teil des json der darunter.

+1

Ich werde hier auf einem Bein gehen und übernehmen von „Array von jsons“ Sie bedeuten „Array von Objekten.“ JSON ist eine * textuelle Notation * für den Datenaustausch. [(Mehr hier.)] (Http://stackoverflow.com/a/2904181/157247) Wenn Sie mit JavaScript-Quellcode arbeiten und sich nicht mit einem * string * befassen, haben Sie es nicht mit JSON zu tun. –

+1

Was hast du probiert? Was hat Ihre Forschung ergeben? Auf welcher Rolle steckst du fest? –

Antwort

2

Wie Sie bereits die Ausbreitung Eigenschaft verwendet, um die Karte zu destrukturiert, Sie dann müssen genau das 2D-Array abzubilden, um ein Array von Objekten, die sich leicht mit Array Destrukturierung getan werden kann:

[...directory].map(([name,obj]) => ({name,...obj})); 

oder ohne ESnext :

[...directory].map(([name,obj]) => Object.assign({name},obj)); 

Try it

+1

Ganz so, kein Grund, Spread statt 'Array.from' zu verwenden. Wie du sagst, spread * properties * (lurkers: die zweite Verwendung von '...') sind nur Stage 3, also werden sie wahrscheinlich (aber wahrscheinlich) ES2018 machen - aber sie werden von transpilern gut unterstützt. –

+0

Normalerweise stimme ich nicht auf, wenn es keine Erklärung gibt. (Habe dieses mal.) –

+0

@crowder * war * und danke;) –

0

Sie könnten Array.from verwenden und die gewünschten Objekte bauen.

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; }