I have JSON like this:
[
  {
     platformId: 1,
     payout: 15,
     numOfPeople: 4
  },
  {
     platformId: 1,
     payout: 12,
     numOfPeople: 3
  },
  {
     platformId: 2,
     payout: 6,
     numOfPeople: 5
  },
  {
     platformId: 2,
     payout: 10,
     numOfPeople: 1
  },
]
And I want to Group it by platformId with sum of payout and numOfPeople.
I.e. in result I want JSON like this:
[
  "1": {
     payout: 27,
     numOfPeople: 7
   },
  "2": {
     payout: 16,
     numOfPeople: 6
  }
] 
I tried to use underscore.js's _.groupBy method, and it groups fine, but how I can get the SUM of objects properties values like I demonstrated above? 
Here's a Lodash solution to this kind of problem. It's similar to Underscore, but with some more advanced features.
const data = [{
    platformId: 1,
    payout: 15,
    numOfPeople: 4
  },
  {
    platformId: 1,
    payout: 12,
    numOfPeople: 3
  },
  {
    platformId: 2,
    payout: 6,
    numOfPeople: 5
  },
  {
    platformId: 2,
    payout: 10,
    numOfPeople: 1
  },
];
const ans = _(data)
  .groupBy('platformId')
  .map((platform, id) => ({
    platformId: id,
    payout: _.sumBy(platform, 'payout'),
    numOfPeople: _.sumBy(platform, 'numOfPeople')
  }))
  .value()
console.log(ans);
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With