1

i want to create a new array from api, but i don't know how to make it, i'm very confused in looping each array

This is each data

 const group_one = [
      {
        name: "smash",
        id: "012112"
      },
      {
        name: "ahlan wa sahlan",
        id: "123123"
      },
      {
        name: "ahh",
        id: "1231239"
      },
      {
        name: "laki",
        id: "21312"
      }
    ];
    
    const group_two = [
      {
        name: "ahh",
        id: "1231239"
      },
      {
        name: "laki",
        id: "21312"
      }
    ];
    
    const group_three = [
      {
        name: "smash",
        id: "012112"
      },
      {
        name: "ahlan wa sahlan",
        id: "123123"
      }
    ];
    

this is the main data of api

const data = [
          {
            body: group_one,
            group_id: "01"
          },
          {
            body: grouop_two,
            group_id: "02"
          },
          {
            body: group_three,
            group_id: "03"
          }
        ];
    export default data;

i want to create a new array like this, bcs i want to create a new object containing the group_id of each same data in the array

const newArray = [
{
    name: "smash",
    id: "012112",
group_id: ["01","03"]
  },
  {
    name: "ahlan wa sahlan",
    id: "123123",
group_id: ["01","03"]
  },
  {
    name: "ahh",
    id: "1231239",
group_id: ["01","02"]
  },
  {
    name: "laki",
    id: "21312",
group_id: ["01","02"]
  }
];

can someone help me? with articles or codes. thanks for helping me (sry for my bad english)

2

1 Answer 1

1

Please see below commented code:

const group01 = [
    {
        name: 'smash',
        id: '012112'
    },
    {
        name: 'ahlan wa sahlan',
        id: '123123'
    },
    {
        name: 'ahh',
        id: '1231239'
    },
    {
        name: 'laki',
        id: '21312'
    }
];

const group02 = [
    {
        name: 'ahh',
        id: '1231239'
    },
    {
        name: 'laki',
        id: '21312'
    }
];

const group03 = [
    {
        name: 'smash',
        id: '012112'
    },
    {
        name: 'ahlan wa sahlan',
        id: '123123'
    }
];

const data = [
    {
        body: group01,
        group_id: '01'
    },
    {
        body: group02,
        group_id: '02'
    },
    {
        body: group03,
        group_id: '03'
    }
];

function regroup(input) {
    // USE Map FOR EASIER ITEM HANDLING.
    const output = new Map();

    // LOOP MAIN DATA ARRAY.
    input.forEach(({body, group_id}) => {
        // LOOP EACH GROUP.
        body.forEach(({name, id}) => {
            // USE id TO GET AN ITEM FROM output OR CREATE A NEW ONE IF IT DOES NOT EXIST.
            const item = output.get(id) || {name, id, group_id: []};
            // PUSH CURRENT group_id TO THE RESPECTIVE ARRAY.
            item.group_id.push(group_id);
            // SAVE ITEM TO OUTPUT Map AGAIN.
            output.set(id, item);
        });
    });

    // RETURN OUTPUT.
    return Array.from(output.values());
}

const new_data = regroup(data);

console.log(new_data);

Sign up to request clarification or add additional context in comments.

1 Comment

@AchmadSufyan you're welcome. Please remember to mark the question as answered if you consider it has been fully answered.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.