0

I have a json object in NODE like this:

{
    "data": [
      {
        "groupname": "TestGroup001",
        "description": "Test Gruppe für xyz...",
        "mgID": 1,
        "uID": 1,
        "username": "Max M.",
        "email": "m.m@gmx.de"
      },
      {
        "groupname": "TestGroup001",
        "description": "Test Gruppe für xyz...",
        "mgID": 1,
        "uID": 98,
        "username": "Susanne S.",
        "email": "s.s@gmx.de"
      },
      {
        "groupname": "TestGroup002",
        "description": "Test Gruppe für abc...",
        "mgID": 22,
        "uID": 96,
        "username": "Moritz A.",
        "email": "m.a@gmx.de"
      },
      {
        "groupname": "TestGroup002",
        "description": "Test Gruppe für abc...",
        "mgID": 22,
        "uID": 95,
        "username": "Lennart H",
        "email": "l.h@gmx.de"
      }
    ]
  }

and i need it grouped by "groupname" or better by "mgID" like that..

{
    "data": [
      {
        "groupname": "TestGroup001",
        "description": "Test Gruppe für xyz...",
        "mgID": 1,
        "users": [
          {
            "uID": 1,
            "username": "Max M.",
            "email": "m.m@gmx.de"
          },
          {
            "uID": 98,
            "username": "Susanne S.",
            "email": "s.s@gmx.de"
          }
        ]
      },
      {
        "groupname": "TestGroup002",
        "description": "Test Gruppe für abc...",
        "mgID": 22,
        "users": [
          {
            "uID": 96,
            "username": "Moritz A.",
            "email": "m.a@gmx.de"
          },
          {
            "uID": 95,
            "username": "Lennart H",
            "email": "l.h@gmx.de"
          }
        ]
      }
    ]
  }

i tried it with object.map...without success also with object.entries...also without success

i dont need working code...just some keywords.

Konrad
  • 21,590
  • 4
  • 28
  • 64
RKRdev
  • 3
  • 2
  • Does this answer your question? [javascript | Object grouping](https://stackoverflow.com/questions/21776389/javascript-object-grouping) – Konrad Apr 12 '23 at 11:07
  • Is it a duplicate (subset) of this question: https://stackoverflow.com/questions/31558996/grouping-json-by-multiple-fields-in-node-js – George 2.0 Hope Apr 12 '23 at 11:10

1 Answers1

0

A code like this will do that:

const result = {
  data: Object.values(
    input.data.reduce((groups, current) => {
      const { mgID, description, groupname, ...rest } = current;
      if (!(mgID in groups)) {
        groups[mgID] = {
          mgID,
          description,
          groupname,
          users: [],
        };
      }
      groups[mgID].users.push(rest);
      return groups;
    }, {})
  ),
};

const input = {
  data: [
    {
      groupname: "TestGroup001",
      description: "Test Gruppe für xyz...",
      mgID: 1,
      uID: 1,
      username: "Max M.",
      email: "m.m@gmx.de",
    },
    {
      groupname: "TestGroup001",
      description: "Test Gruppe für xyz...",
      mgID: 1,
      uID: 98,
      username: "Susanne S.",
      email: "s.s@gmx.de",
    },
    {
      groupname: "TestGroup002",
      description: "Test Gruppe für abc...",
      mgID: 22,
      uID: 96,
      username: "Moritz A.",
      email: "m.a@gmx.de",
    },
    {
      groupname: "TestGroup002",
      description: "Test Gruppe für abc...",
      mgID: 22,
      uID: 95,
      username: "Lennart H",
      email: "l.h@gmx.de",
    },
  ],
};

const result = {
  data: Object.values(
    input.data.reduce((groups, current) => {
      const { mgID, description, groupname, ...rest } = current;
      if (!(mgID in groups)) {
        groups[mgID] = {
          mgID,
          description,
          groupname,
          users: [],
        };
      }
      groups[mgID].users.push(rest);
      return groups;
    }, {})
  ),
};
console.log(result);
Konrad
  • 21,590
  • 4
  • 28
  • 64