Grouping Elemen Array

Untuk grouping objek dalam sebuah array berdasarkan key-nya, kita bisa pake fungsi reduce().

function groupBy(array = [], key) {
  return array.reduce((acc = {}, current)=>{
    const val = current[key];
    
    // yang nggak punya key ga diproses  
    if(!val) {
      return acc;
    }
    
    // kalo value keynya belum ada di accumulator,
    // buat baru  
    if(!acc[val]) {
      acc[val] = []
    }
    
    acc[val].push(current);
    
    return acc;
    
  }, {})
}

console.log(groupBy([{
  name: 'aa',
  value: 123
}, {
  name: 'bb',
  value: 345
}, {
  name: 'aa',
  value: 456
},{
  name: 'cc',
  value: 456
}], 'value'))

Outputnya:

{
  '123': [ { name: 'aa', value: 123 } ],
  '345': [ { name: 'bb', value: 345 } ],
  '456': [ { name: 'aa', value: 456 }, { name: 'cc', value: 456 } ]
}

Objek yang nggak punya key diabaikan.

console.log(groupBy([{
  name: 'aa',
  value: 123,
  age: 10
}, {
  name: 'bb',
  value: 345
}, {
  name: 'aa',
  value: 456
},{
  name: 'cc',
  value: 456,
  age: 20
}], 'age'))

Outputnya hanya yang punya age:

{
  '10': [ { name: 'aa', value: 123, age: 10 } ],
  '20': [ { name: 'cc', value: 456, age: 20 } ]
}