0

How can I transform employees array variable to departments array variable using javascript es6 iterators functions? I am looking for an efficient solution.

From:

var employees = [
    { name: 'John', department: 'Digital Experience' },
    { name: 'Doe', department: 'Digital Transformation' },
    { name: 'Symon', department: 'Digital Planning' },
    { name: 'Joey', department: 'Digital Experience' },
    { name: 'Abul', department: 'Digital Experience' },
    { name: 'Smith', department: 'Digital Experience' },
    { name: 'Ajad', department: 'Digital Transformation' },
    { name: 'Rahim', department: 'Digital Transformation' },
    { name: 'Luke', department: 'Digital Planning' },
];

To:

var departments = [
        {
            department: 'Digital Experience',
            employeeNames: ['Johm', 'Joey', 'Abul', 'Smith']
        },
        {
            department: 'Digital Transformation',
            employeeNames: ['Doe', 'Ajad', 'Rahim']
        },
        {
            department: 'Digital Planning',
            employeeNames: ['Symon', 'Luke']
        }
    ]
toothful
  • 882
  • 3
  • 15
  • 25

1 Answers1

1

I'm sure there's other ways, this seems reasonably short though.

var e = [
    { name: 'John', department: 'Digital Experience' },
    { name: 'Doe', department: 'Digital Transformation' },
    { name: 'Symon', department: 'Digital Planning' },
    { name: 'Joey', department: 'Digital Experience' },
    { name: 'Abul', department: 'Digital Experience' },
    { name: 'Smith', department: 'Digital Experience' },
    { name: 'Ajad', department: 'Digital Transformation' },
    { name: 'Rahim', department: 'Digital Transformation' },
    { name: 'Luke', department: 'Digital Planning' },
];

const departments = [...new Set(e.map(x => x.department))].map(y => {
  return {
    department: y,
    employeeNames: e.filter(z => z.department === y).map(w => w.name)
  }
})

console.log(departments)
connexo
  • 53,704
  • 14
  • 91
  • 128