group an array of objects by key
//agrupar por species (2 objetos) y c/u tiene un array de nombres
let animals = [
{species: 'dog', name:'perlis'},
{species: 'dog', name:'wilson'},
{species: 'dog', name:'peludo'},
{species: 'cat', name:'kitty'},
{species: 'cat', name:'fluffy'},
{species: 'cat', name:'bigotes'}
]
let groupedAnimals = animals
.reduce(function(newAnimal, animal,i){
newAnimal[animal.species] = newAnimal[animal.species] || []
newAnimal[animal.species].push(animal)
return newAnimal
},{})
//console.log(JSON.stringify(groupedAnimals, null, 2))
let newArr = []
for (group in groupedAnimals) {
let myObj = {};
myObj['species'] = groupedAnimals[group][0].species
myObj['pets'] = groupedAnimals[group].map(pet => {
return pet.name
})
newArr.push(myObj)
}
console.log(newArr)
/*
[[object Object] {
pets: ["perlis", "wilson", "peludo"],
species: "dog"
}, [object Object] {
pets: ["kitty", "fluffy", "bigotes"],
species: "cat"
}]
*/