这是我的数组。
donations = [
{
donateTo: "BaseCamp",
amount: 1000,
date: "12/19/2014, 08:40"
},
{
donateTo: "Where Most Needed",
amount: 3000,
date: "12/12/2014, 08:40"
},
{
donateTo: "Where Most Needed",
amount: 2000,
date: "12/11/2014, 08:40"
}
];
我该如何退货?总捐款额最高的
donateTo
捐款连同该总数以及组成该总数的礼物计数一起返回。{ donateTo: "Where Most Needed", total: 5000, count: 2}
我以前可以使用MongoDB获得结果,但是由于我使用的是Meteor,因此聚合确实很丑陋,并且没有反应性。我宁愿获取游标,然后在客户端使用javascript函数获取所需的数据。
谢谢
最佳答案
这是使用下划线的实现:
var orgs = {};
_.each(donations, function(donation) {
if (orgs[donation.donateTo] == null)
orgs[donation.donateTo] = 0;
orgs[donation.donateTo] += donation.amount;
});
var amount = _.max(_.values(orgs));
var donateTo = _.invert(orgs)[amount];
var count = _.where(donations, {donateTo: donateTo}).length;
var result = {donateTo: donateTo, amount: amount, count: count};
console.log(result);