【问题标题】:groupBy count in lodashlodash中的groupBy计数
【发布时间】:2016-08-10 09:06:31
【问题描述】:
我有一个这样的对象数组:
[
{
rating: 1
},
{
rating: 2
},
{
rating: 3
},
{
rating: 1
}
]
我想要这样的结果 -
{
1: 2,
2: 1,
3: 1
}
它将是Rating_Value: Count。
我怎样才能在 lodash 中做到这一点?或者如果它可以在没有lodash的情况下进行优化?
【问题讨论】:
标签:
javascript
arrays
lodash
【解决方案1】:
您可以使用lodash#countBy。
var result = _.countBy(data, 'rating');
var data = [
{
rating: 1
},
{
rating: 2
},
{
rating: 3
},
{
rating: 1
}
];
var result = _.countBy(data, 'rating');
console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.14.2/lodash.min.js"></script>
【解决方案2】:
您可以使用reduce() 获得此结果。
var data = [{"rating":1},{"rating":2},{"rating":3},{"rating":1}];
var result = data.reduce(function(r, e) {
r[e.rating] = (r[e.rating] || 0) + 1;
return r;
}, {});
console.log(result)
【解决方案3】:
你可以像这样在纯 JS 中做到这一点:
var myArr = [
{
rating: 1
},
{
rating: 2
},
{
rating: 3
},
{
rating: 1
}
];
var ratingObject = {};
myArr.forEach(function(valueObject) {
ratingObject[valueObject.rating] = ratingObject[valueObject.rating] ? ratingObject[valueObject.rating] + 1 : 1;
});