使用 lodash 从数组中获取唯一值、总和和计数

Fil*_*auw 3 javascript arrays lodash

我有一个数组,我想在其中获取唯一值及其出现次数,并对匹配的公司名称求和。我正在使用 lodash,到目前为止我能够获得每个唯一的值。

如何有效地获取每次出现的次数并对它们求和?价格数据是字符串。

var data = [
 {"cat":"IT","company":"Apple", "price":"100.5"},
 {"cat":"IT","company":"Apple", "price":"100"},
 {"cat":"IT","company":"Google", "price": "100"},
 {"cat":"IT","company":"Apple", "price": "100"}
];
Run Code Online (Sandbox Code Playgroud)

我需要的结果:

Company | Count | Sum
Apple   |   3   | 300.5
Google  |   1   | 100
Run Code Online (Sandbox Code Playgroud)

到目前为止我的代码:

var result = _.map(_.uniqBy(data, 'company'), function (item) {
  $('table').append('<tr><td>'+item.company+'</td></tr>');
});
Run Code Online (Sandbox Code Playgroud)

是否可以在同一个 _.map 函数内进行求和和计数?

Rom*_*est 5

纯JSEcmascript5)解决方案使用Array.prototype.reduce()Object.keys()功能:

var data = [
 {"cat":"IT","company":"Apple", "price":"100.5"},
 {"cat":"IT","company":"Apple", "price":"100"},
 {"cat":"IT","company":"Google", "price": "100"},
 {"cat":"IT","company":"Apple", "price": "100"}
], rows = "";

var result = data.reduce(function(r, o) {
    if (r[o.company]){
        ++r[o.company].count;
        r[o.company].price += Number(o.price);
    } else {
        r[o.company] = {count: 1, price: Number(o.price)};
    }
    return r;
}, {});

Object.keys(result).forEach(function(name){
  rows += '<tr><td>'+ name +'</td>' + 
          '<td>'+ result[name].count +'</td>' +
          '<td>'+ result[name].price +'</td></tr>';

});
$('table').append(rows);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <th>Company</th>
    <th>Count</th>
    <th>Sum</th>
  </tr>        
</table>
Run Code Online (Sandbox Code Playgroud)