JSFiddle - React, Tailwind, and code Playground

by Dieterg

JavaScript

var characters = [{
    'name': 'barney',
    'age': 42,
    'pet': 'dog'
}, {
    'name': 'fred',
    'age': 35,
    'pet': 'dog'
}, {
    'name': 'barney',
    'age': 42,
    'pet': 'cat'
}, {
    'name': 'fred',
    'age': 35,
    'pet': 'fish'
}];

var result = _.reduce(characters, function (prev, current) {
    var char = _.find(prev, function (character) {
        return character['name'] === current['name'];
    });
     
    // Character does not yet exists in the array, push it
    if (char === undefined) {
        prev.push(current);
    } else {
        // If char['pet'] is no array, create one
        if (!_.isArray(char['pet'])) {
            char['pet'] = [char['pet']];
        }
        
        // Push the current pets to the previous pets
        char['pet'].push(current['pet']);
    }

    return prev;
}, []); // Initialize an empty array for the prev object

console.log(result);