Search code examples
javascriptarraysgrouping

How to group by and sum an array of objects?


I would like to group an array of objects by Id and sum the quantity in jQuery. How can I achieve this?

For example:

var array = [
  { Id: "001", qty: 1 },
  { Id: "002", qty: 2 },
  { Id: "001", qty: 2 },
  { Id: "003", qty: 4 }
]

Should result in:

[
  { Id: "001", qty: 3 },
  { Id: "002", qty: 2 },
  { Id: "003", qty: 4 }
]

Solution

  • You can loop and sum it up (reduce documentation)

    var array = [
      { Id: "001", qty: 1 }, 
      { Id: "002", qty: 2 }, 
      { Id: "001", qty: 2 }, 
      { Id: "003", qty: 4 }
    ];
    
    var result = [];
    array.reduce(function(res, value) {
      if (!res[value.Id]) {
        res[value.Id] = { Id: value.Id, qty: 0 };
        result.push(res[value.Id])
      }
      res[value.Id].qty += value.qty;
      return res;
    }, {});
    
    console.log(result)

    Fiddle: Fiddle