robertoandres24
11/5/2018 - 3:53 AM

group by

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"
}]
*/