Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Group javascript array object by same key

I have an array of object some with same month name but different values based on day. How do we group array object based on same property value for example:

 [ { month: 'Jan', value: 3 },
  { month: 'Jan', value: 3.5 },
  { month: 'Feb', value: 2.1 },
  { month: 'Mar', value: 6 },
  { month: 'Apr', value: 4.3 },
  { month: 'May', value: 5.5 },
  { month: 'Jun', value: 7 },
  { month: 'Jun', value: 9 },
  { month: 'Jul', value: 7 },
  { month: 'Jul', value: 9 },
  { month: 'Jul', value: 7 },
  { month: 'Aug', value: 9 },
  { month: 'Sep', value: 9 },
  { month: 'Sep', value: 9 },
  { month: 'Oct', value: 8 },
  { month: 'Oct', value: 5 },
  { month: 'Oct', value: 3 },
  { month: 'Nov', value: 12 },
  { month: 'Nov', value: 19.5 } ]

So what i want to get is new array with month and sum of month values:

[{month:"Jan", val:6.5},{month:"Feb", val:5.6},{month:"Mar", val:6},].
like image 581
Endar Avatar asked Feb 07 '26 23:02

Endar


1 Answers

You could take a Map and reduce the array by adding the value to the month nad get new arrays from the grouped result.

var data = [{ month: 'Jan', value: 3 }, { month: 'Jan', value: 3.5 }, { month: 'Feb', value: 2.1 }, { month: 'Mar', value: 6 }, { month: 'Apr', value: 4.3 }, { month: 'May', value: 5.5 }, { month: 'Jun', value: 7 }, { month: 'Jun', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Jul', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Aug', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Oct', value: 8 }, { month: 'Oct', value: 5 }, { month: 'Oct', value: 3 }, { month: 'Nov', value: 12 }, { month: 'Nov', value: 19.5 }],
    result = Array.from(
        data.reduce(
            (m, { month, value }) => m.set(month, (m.get(month) || 0) + value),
            new Map
        ),
        ([month, value]) => ({ month, value })
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
like image 122
Nina Scholz Avatar answered Feb 12 '26 03:02

Nina Scholz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!