45

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 }
]
Ivar
  • 6,138
  • 12
  • 49
  • 61
Phirum
  • 655
  • 2
  • 6
  • 12
  • An updated, TypeScript-friendly SO that also supports multiple grouping keys is discussed [here](https://stackoverflow.com/a/76272302/8929855) – swimmer May 23 '23 at 17:10

2 Answers2

117

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

live2
  • 3,771
  • 2
  • 37
  • 46
Arun P Johny
  • 384,651
  • 66
  • 527
  • 531
1
var newArr = [];

$.each(array,function(index,element){
    if(newArr[element.Id]==undefined){
        newArr[element.Id] =0;
    }
    newArr[element.Id] += element.qty;
});
console.log(newArr);

Demo

Community
  • 1
  • 1
Sadikhasan
  • 18,365
  • 21
  • 80
  • 122