2016-04-25 8 views
0

Der Fall ist einfach - ich habe eine Liste von Objekten bekommt:UndescoreJS - Konvertieren von Objekteigenschaften in Arrays

[ 
{"id":"0001","status":"prod"}, 
{"id":"0002","status":"prod"}, 
{"id":"0003","status":"prod"}, 
{"id":"0004","status":"prod"}, 
{"id":"0005","status":"dev"}, 
{"id":"0006","status":"dev"} 
] 

, wenn ich Benutzer _.groupBy('status'), das Ergebnis ist:

{ 
    prod: [{"id":"0001","status":"prod"}, 
     {"id":"0002","status":"prod"}, 
     {"id":"0003","status":"prod"}, 
     {"id":"0004","status":"prod"}], 
    dev: [{"id":"0005","status":"dev"}, 
     {"id":"0006","status":"dev"}] 
} 

Aber ich brauche ein Ergebnis, wie der Code unten an Chart.js (mit Underscore.js) zu senden:

{ 
    legend: ['prod','dev'], 
    data: [4,2] // Array Length 
} 

Wie kann ich Underscor verwenden e.js um mein Problem zu lösen?

Antwort

3

In einer Kette, nur so zum Spaß.

_.chain(data) 
    .groupBy('status') 
    .mapObject(x => x.length) 
    .pairs() 
    .unzip() 
    .zip(['legend', 'data']) 
    .map(x => x.reverse()) 
    .object() 
    .value(); 
0

benötigen nur einen weiteren Schritt:

var output = { 
    legend: [], 
    data: [] 
} 
_.chain(rawData).groupBy('status').each(function(value,key){ 
     output.legend.push(key); 
     output.legend.push(data.length); 
}) 
0
var legend = _.uniq(_.pluck(data, 'status')); 
var groupedData = _.groupBy(data, 'status'); 

var result = { 
    legend: legend, 
    data: _.map(legend, function(status) { 
     return groupedData[status].length; 
    }) 
}; 
Verwandte Themen