-1

I have this type of json object:

{
   "id": 12,
   "firstName": "Mohamed",
   "lastName": "Sameer",
   "contactgroups": [
      {
         "id": 16,
         "group": {
            "id": 4,
            "groupname": "Angular"
         }
      },
      {
         "id": 19,
         "group": {
            "id": 5,
            "groupname": "React"
         }
      },
      {
         "id": 20,
         "group": {
            "id": 6,
            "groupname": "Node"
         }
      }
   ]
}

I want output like this:

{
   "id": 12,
   "firstName": "Mohamed",
   "lastName": "Sameer",
   "groups": [4,5,6] // coming from group object which has id and groupname //
}

How to do using any of the javascript methods, i dont need for loops.

How to do using map?

I tried this:

var data = {
   "id": 12,
   "firstName": "Mohamed",
   "lastName": "Sameer",
   "contactgroups": [
      {
         "id": 16,
         "group": {
            "id": 4,
            "groupname": "Angular"
         }
      },
      {
         "id": 19,
         "group": {
            "id": 5,
            "groupname": "React"
         }
      },
      {
         "id": 20,
         "group": {
            "id": 6,
            "groupname": "Node"
         }
      }
   ]
}


var finalData = data.contactgroups.map(x=> {
   return ({
      id : data.id,
      firstName: data.firstName,
      lastName: data.lastName,
      groups: [x.group.id]
   })
})

console.log(finalData);
Mohamed Sameer
  • 2,998
  • 3
  • 22
  • 51

3 Answers3

1

Try something like this. BTW, I used ES6 syntax.

let obj1 = {
   "id": 12,
   "firstName": "Mohamed",
   "lastName": "Sameer",
   "contactgroups": [
      {
         "id": 16,
         "group": {
            "id": 4,
            "groupname": "Angular"
         }
      },
      {
         "id": 19,
         "group": {
            "id": 5,
            "groupname": "React"
         }
      },
      {
         "id": 20,
         "group": {
            "id": 6,
            "groupname": "Node"
         }
      }
   ]
};

let groups = obj1.contactgroups.map(item=>(item.group.id));

let obj2 = {
    "id": obj1.id,
   "firstName": obj1.firstName,
   "lastName": obj1.lastName,
   "groups": groups
}
Afzal Hossain
  • 3,258
  • 1
  • 21
  • 13
1

Take some destructuring assignments and return a new object with mapped id.

function getGrouped({ id, firstName, lastName, contactgroups: groups }) {
    return { id, firstName, lastName, groups: groups.map(({ group: { id } }) => id) };
}

var data = { id: 12, firstName: "Mohamed", lastName: "Sameer", contactgroups: [{ id: 16, group: { id: 4, groupname: "Angular" } }, { id: 19, group: { id: 5, groupname: "React" } }, { id: 20, group: { id: 6, groupname: "Node" } }] };

console.log(getGrouped(data));
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

the answer to your question would be the below :

var finalData = {
      id : data.id,
      firstName: data.firstName,
      lastName: data.lastName,groups: data.contactgroups.map(x=> x.group.id)}

console.log(finalData);
elias asaid
  • 79
  • 11