Search code examples
javascriptarraysobjectjavascript-objects

Javascript array of objects group and sum items


I'm struggling with getting the desired output of Array of objects. So let's I have this Array of object:

var cars = [
    { make: 'audi', model: 'r8', quantity: '5' }, 
    { make: 'audi', model: 'rs5', quantity: '10'}, 
    { make: 'ford', model: 'mustang', quantity: '3' }, 
    { make: 'kia', model: 'optima', quantity: '9' },
    { make: 'audi', model: 'rw7', quantity: '2' },
    { make: 'ford', model: 'fusion', quantity: '7' }
],

The desired Output:

var cars = [
    { make: 'audi', sumQuantity: '17' }, 
    { make: 'ford', sumQuantity: '10' }, 
    { make: 'kia',  sumQuantity: '9' }
],

I tried to map through them but didn't solve my problem, hope you guys help out here! Thanks.


Solution

  • This works fine

    Object.values(
      cars.reduce((agg, car) => {
        if (agg[car.make] === undefined) agg[car.make] = { make: car.make, sumQuantity: 0 }
        agg[car.make].sumQuantity += +car.quantity
        return agg
      }, {})
    )