0

I want to create another array, where repeated campaigns values are added

let arrayName = [
  { campaign: "a", value: 3 },
  { campaign: "b", value: 5 },
  { campaign: "c", value: 7 },
  { campaign: "a", value: 9 },
];

EXPECTED OUTPUT:

[
  { campaign: 'a', value: 12 },
  { campaign: 'b', value: 5 },
  { campaign: 'c', value: 7 }
]
Brijesh
  • 33
  • 6

1 Answers1

1

You could reduce the items within an object and then map the entries back to objects.

const arrayName = [
  { campaign: "a", value: 3 },
  { campaign: "b", value: 5 },
  { campaign: "c", value: 7 },
  { campaign: "a", value: 9 },
];

const result = Object
  .entries(arrayName.reduce((acc, { campaign, value }) =>
    ({ ...acc, [campaign]: (acc[campaign] || 0) + value }), {}))
  .map(([campaign, value]) => ({ campaign, value }));

console.log(result);
.as-console-wrapper { top: 0; max-height: 100% !important; }
Mr. Polywhirl
  • 42,981
  • 12
  • 84
  • 132
  • this works! can you please take some time to help me with https://stackoverflow.com/questions/68807712/combine-multiple-items-based-on-properties – Brijesh Aug 16 '21 at 18:38