2016-07-20 2 views
0

Ich arbeite mit HighChart, um ein Säulendiagramm zu erstellen. Irgendwie habe ich erreicht, folgendes Array ofObj über die Kommunikation mit der Datenbank zu erstellen.Javascript: Transform Array von Objekt-Antwort über lodash oder Unterstrich oder Corejavascript

Nun muss ich folgenden source Array von Objekt zu unter Ausgabe umwandeln.

var source = [ 
{data: 258, name: '2014'} 
{data: 18, name: '2016'} 
{data: 516, name: '2014'} 
{data: 0, name: '2014'} 
{data: 354, name: '2014'} 
{data: 18, name: '2016'} 
]` 

Konvertieren dieses Array von Objekt zu

Output 

[{ 
    name: '2014', 
    data: [258, 516, 354] 
    }, { 
    name: '2016', 
    data: [18, 0, 18] 
}] 

Grundsätzlich ich zu einer Gruppe meine Array wollen nach Name (Jahr) und Daten sollten

Hier in Array ist die Lösungen, die ich habe angewendet.

var source = []; 
_.each(source, function(singlerec) { 
     source.push({ 
     name: singlerec.name, 
     data: singlerec.data // Here It only assign single record 
     }); 
    }); 
+0

@ T.J.Crowder Danke, natürlich habe ich zuerst versucht, aber du hast Recht, ich habe meine Fortschritte in Frage gestellt. – Denish

+0

Fügen Sie hinzu, was mit der Ausgabe Ihrer Lösung * falsch * ist. Außerdem sieht Ihre Lösung aus, als ob sie überhaupt keinen Versuch unternimmt, Dinge nach Namen zu gruppieren. Das ist sehr ähnlich wie jemand anderen zu bitten, die Gruppierung nach Namen für Sie hinzuzufügen. –

+0

Suche ist auch dein Freund. :-) http://stackoverflow.com/questions/36069213/javascript-group-data-in-objects, http://stackoverflow.com/questions/14592799/object-array-group-by-an-element, http : //stackoverflow.com/questions/38079037/group-items-in-javascript-array-object –

Antwort

3

In Lodash, verwende ich _.groupBy immer und dann _.map in das Ausgabeformat.

var source = [{"data":258,"name":"2014"},{"data":18,"name":"2016"},{"data":516,"name":"2014"},{"data":0,"name":"2014"},{"data":354,"name":"2014"},{"data":18,"name":"2016"}]; 
 

 
var output = _(source) 
 
    .groupBy('name') 
 
    .map(function(v, k) { return { name: k, data: _.map(v, 'data') } }) 
 
    .value(); 
 

 
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

0

ist es eine Möglichkeit, Array zu durchlaufen einmal mit reduce und auch ohne lodash.

source.reduce((p, n) => { 
    (p[n.name] || (p[n.name] = [])).push(n.data); 
    return p 
}, {}) 
Verwandte Themen