我正在使用此函数对数组进行分组:
Array.prototype.groupBy = function(prop) {
return this.reduce(function(groups, item) {
var val = item[prop];
groups[val] = groups[val] || [];
groups[val].push(item);
return groups;
}, {});
}
我在另一个获得日期的函数中使用它
vm.parkings.forEach(function(value, key) {
value.receiptsByDate = [];
if (value.receipts != undefined) {
value.receipts.forEach(function(rcpts) {
var date = rcpts.date.split('/');
var newDate = date[2] + '/' + date[0];
var year = date[2];
var month = date[0];
var price = rcpts.value;
value.receiptsByDate.push({newDate, price, month, year});
value.newReceipt = value.receiptsByDate.groupBy('month');
})
}
})
结果:
在我的newReceipt中,我按月分类对象,确定。
我想根据月份来计算价格。 示例:在数组内部三,访问对象并汇总价格。
这是最好的方法吗?
修改
我使用了下划线并且它正在工作。它看起来像这样:
var result = _.groupBy(receiptsByDate, "month");
var out = _(result).map(function(g, key) {
return {month: key, price: _(g).reduce(function(m, x){return m + x.price}, 0)}
})
答案 0 :(得分:0)
试试linq.js库:
var res = Enumerable.From([
{date: new Date(), price: 10},
{date: new Date(), price: 20},
{date: new Date(2014, 15, 4), price: 30},
{date: new Date(2014, 15, 4), price: 40},
{date: new Date(2014, 15, 4), price: 50}
]).GroupBy("$.date.getMonth() + 1", null, function (key, gr) {
var temp = {
month: key,
totalPrice: gr.Sum("$.price")
};
console.log(temp);
return temp;
}).ToArray();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://neue.cc/linq.min.js"></script>