-2

How can I combine both arrays (profile and countries), but filter any objects where the Name is the same in both arrays (but only remove the object that has IsDirector: null)

I'm guessing it's a combination of concat & filter but not sure how to get it working.

Data:

let profile = [
   {
      "IsDirector":true,
      "Name":"Germany"
   },
   {
      "IsDirector":false,
      "Name":"Spain"
   },
]

let countries = [
   {
      "IsDirector":null,
      "Name":"Germany"
   },
   {
      "IsDirector":null,
      "Name":"Spain"
   },
   {
      "IsDirector":null,
      "Name":"Portugal"
   }
]

Desired result:

 [
       {
          "IsDirector":true,
          "Name":"Germany"
       },
       {
          "IsDirector":false,
          "Name":"Spain"
       },
       {
          "IsDirector":null,
          "Name":"Portugal"
       }
    ]
BennKingy
  • 1,265
  • 1
  • 18
  • 43

1 Answers1

2

Convert the first array into an object for better access and use map

const profile = [
   {
      "IsDirector":true,
      "Name":"Germany"
   },
   {
      "IsDirector":false,
      "Name":"Spain"
   },
]

const countries = [
   {
      "IsDirector":null,
      "Name":"Germany"
   },
   {
      "IsDirector":null,
      "Name":"Spain"
   },
   {
      "IsDirector":null,
      "Name":"Portugal"
   }
]

function f() {
  const p = Object.fromEntries(profile.map(el => ([el.Name, el])));
  return countries.map(el => ({ ...el, IsDirector: p[el.Name]?.IsDirector ?? null }));
}

console.log(f());
jabaa
  • 5,844
  • 3
  • 9
  • 30