-4

I have an Array like this

var array = [
{occurrences: 1, position: "1"},
{occurrences: 4, position: "2"},
{occurrences: 1, position: "1"},
{occurrences: 2, position: "3"},
];

And I want to sum it up like this:

{occurrences: 2, position: "1"},
{occurrences: 4, position: "2"},
{occurrences: 2, position: "3"}

Can I achieve this by using lodash or anything else?

Cœur
  • 37,241
  • 25
  • 195
  • 267
felix9607
  • 329
  • 5
  • 14

1 Answers1

1

No need for Lodash, like in this answer you need to loop over your array and construct a new result array:

var result = [];
var array = [{
    occurrences: 1,
    position: "1"
  },
  {
    occurrences: 4,
    position: "2"
  },
  {
    occurrences: 1,
    position: "1"
  },
  {
    occurrences: 2,
    position: "3"
  },
];

array.reduce(function(res, value) {
  if (!res[value.position]) {
    res[value.position] = {
      occurrences: 0,
      position: value.position
    };
    result.push(res[value.position])
  }
  res[value.position].occurrences += value.occurrences
  return res;
}, {});

console.log(result);
/*
Will print:

[
  {
    "occurrences": 2,
    "position": "1"
  },
  {
    "occurrences": 4,
    "position": "2"
  },
  {
    "occurrences": 2,
    "position": "3"
  }
]

*/
Fcmam5
  • 4,888
  • 1
  • 16
  • 33