Group Object using ID

by Jithin Raj P R

JavaScript

const data = [
  { id: 1, name: "Alice", dept: "IT" },
  { id: 2, name: "Bob", dept: "HR" },
  { id: 1, name: "John", dept: "IT" },
  { id: 2, name: "Sara", dept: "HR" },
  { id: 3, name: "Mike", dept: "Finance" }
];

function dataOrganizer(arr, key) {

  const grouped = arr.reduce((acc, item) => {
    const groupKey = item[key];

    if (!acc[groupKey]) {
      acc[groupKey] = [];
    }

    acc[groupKey].push(item);

    return acc; // IMPORTANT
  }, {});

  // Convert object to required array format
  return Object.keys(grouped).map(k => ({
    [key]: Number(k),
    users: grouped[k]
  }));
}

console.log(dataOrganizer(data, 'id'));

// Output
// [
//   {
//     id: 1,
//     users: [
//       { id: 1, name: "Alice", dept: "IT" },
//       { id: 1, name: "John", dept: "IT" }
//     ]
//   },
//   {
//     id: 2,
//     users: [
//       { id: 2, name: "Bob", dept: "HR" },
//       { id: 2, name: "Sara", dept: "HR" }
//     ]
//   },
//   {
//     id: 3,
//     users: [
//       { id: 3, name: "Mike", dept: "Finance" }
//     ]
//   }
// ]