这是我的数组。

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);

09-25 17:46