UndescoreJS - 将对象属性转换为数组

UndescoreJS - Convert Object Properties Into 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"}
]

当我使用 _.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 解决我的问题?

只需要一步:

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

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

在一个链中,仅供娱乐。

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