Here's what I have in mind:

Given an array of objects:

```
[
    {
        "name": "Kirk",
        "count": 1
    },
    {
        "name": "Spock",
        "count": 1
    },
    {
        "name": "Kirk",
        "count": 1
    }
]

```

I am trying to get:

```
[
    {
        "name": "Kirk",
        "count": 2
    },
    {
        "name": "Spock",
        "count": 1
    }
]

```

I am wondering if there's already an algorithm, perhaps combining some higher order functions to achieve this. **I could do this easily with loops, but I am looking for a way to solve it using higher order functions**. If someone could point me to what I should use to achieve this, it would be great. Again, **I'm looking for something as elegant as possible** (two maps and a filter would not be a big improvement from loops).

**This is my current solution and I'm looking for something better** (and by better I mean more expressive):

```
function mergeDuplicates(input) {
  var output = [];
  var existingItem = null;
  input.forEach(function (inputItem) {
    existingItem = _.find(output, function (outputItem) {
      return inputItem.name === outputItem.name;
    });
    existingItem ? existingItem.count += 1 : output.push({
      name: inputItem.name,
      count: 1
    });
    existingItem = null;
  });
  return output;
}

```

To make line #10 more clear: in the original array, `count` might be either non-existing or 1, hence I set it to 1.