-2

I have two array of objects arr1 and arr2

if arr1 and arr2 id matches, then push arr1 property name to arr2 in javascript

var arr1 = [
  {id: 1, name : "Helena"},
  {id: 2, name : "John"}
]

var arr2 = [{ 
  country: "MY", 
  details: [{
    mode: "parttime",
    members:[{id:1}, {id: 2}]
  }]
}]

Expected Output:

[{ 
  country: "MY", 
  details:[{
    mode: "parttime",
    members: [
      {id:1, name: "Helena"},
      {id: 2, name: "john"}
    ]
  }]
}]
Irfanullah Jan
  • 3,336
  • 4
  • 24
  • 34
codelearn
  • 59
  • 6

1 Answers1

-1

Please try:

var arr1 = [
  {
    id: 1,
    name: "Helena",
  },
  {
    id: 2,
    name: "John",
  },
];

var arr2 = [
  {
    country: "MY",
    details: [
      {
        mode: "parttime",
        members: [
          {
            id: 1,
          },
          {
            id: 2,
          },
        ],
      },
    ],
  },
];

function getCountriesWithMemberNames(membersArr, countriesArr) {
  // mapping each country obj in the array to a modified country
  return countriesArr.map((country) => {
    return {
      ...country, // take all existing country info
      // modify country.details, mapping it to a new object
      details: country.details.map((detail) => {
        return {
          ...detail, // take all details
          // modying members
          members: detail.members.map((member) => {
            const memberObj = { ...member };
            // check if name exists for this member
            const name = membersArr.find((i) => i.id === member.id).name;
            if (name) {
              memberObj.name = name;
            }
            return memberObj;
          }),
        };
      }),
    };
  });
}

console.log(getCountriesWithMemberNames(arr1, arr2));
Irfanullah Jan
  • 3,336
  • 4
  • 24
  • 34