Случай прост - у меня есть список объектов:
[
{"id":"0001","status":"prod"},
{"id":"0002","status":"prod"},
{"id":"0003","status":"prod"},
{"id":"0004","status":"prod"},
{"id":"0005","status":"dev"},
{"id":"0006","status":"dev"}
]
когда я пользователь _.groupBy('status')
, результатом будет:
{
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"}]
}
Но мне нужен результат, подобный приведенному ниже коду, чтобы отправить Chart.js (используя Underscorejs):
{
legend: ['prod','dev'],
data: [4,2] // Array Length
}
Как я могу использовать Underscore.js для решения моей проблемы?
В одной цепочке, просто для удовольствия.
_.chain(data)
.groupBy('status')
.mapObject(x => x.length)
.pairs()
.unzip()
.zip(['legend', 'data'])
.map(x => x.reverse())
.object()
.value();
var legend = _.uniq(_.pluck(data, 'status'));
var groupedData = _.groupBy(data, 'status');
var result = {
legend: legend,
data: _.map(legend, function(status) {
return groupedData[status].length;
})
};
Просто нужен еще один шаг:
var output = {
legend: [],
data: []
}
_.chain(rawData).groupBy('status').each(function(value,key){
output.legend.push(key);
output.legend.push(data.length);
})