Compare two array of objects based on a properties value and return the matched

Viewed 48

HI All I am having two array of object my aim is to compare them and filter out the matched result my data looks like this

let data1 = [
    {
        name:'tom',
        process:'flipkart',
        master:'pharma',
        profiles: [
            {
                level:'begginer',
                language:'hindi',
                role:['flp_admin','flp_teacher']
            }
        ]
    
    
    },
    {
        name:'jeo',
        process:'amazon',
        master:'science',
        profiles: [
            {
                level:'begginer',
                language:'english',
                role:['amz_admin']
            }
        ]
    
    
    },
    {
        name:'jerry',
        process:'email',
        master:'it',
        profiles: [
            {
                level:'begginer',
                language:'urdu',
                role:['eml_teacher']
            }
        ]
    
    }
]
let data2 = [
    {
        masterName:'Pharma',
        businessProcess: [
            { label:'flipkart', value:'flipkart' },
            { label:'amazon', value:'amazon' }
        ]
    },
        {
        masterName:'science',
        businessProcess: [
            { label:'flipkart', value:'flipkart' },
            { label:'amazon', value:'amazon' }
        ]
    },
        {
        masterName:'it',
        businessProcess: [
            { label:'email', value:'email' },
            { label:'amazon', value:'amazon' }
        ]
    }

I want to compare data1 with data2 and return the match from data2 if master of data1 matches with masterName of data2 and if business of data1 matches with businessProcess.label of data2.

Could anyone please tell me how can I do it?

1 Answers

You can use Array.filter and Array.find to loop over and find the matching items:

let data1 = [{
    name: 'tom',
    process: 'flipkart',
    master: 'pharma',
    profiles: [{
      level: 'begginer',
      language: 'hindi',
      role: ['flp_admin', 'flp_teacher']
    }]


  },
  {
    name: 'jeo',
    process: 'amazon',
    master: 'science',
    profiles: [{
      level: 'begginer',
      language: 'english',
      role: ['amz_admin']
    }]


  },
  {
    name: 'jerry',
    process: 'email',
    master: 'it',
    profiles: [{
      level: 'begginer',
      language: 'urdu',
      role: ['eml_teacher']
    }]

  }
]
let data2 = [{
    masterName: 'Pharma',
    businessProcess: [{
        label: 'flipkart',
        value: 'flipkart'
      },
      {
        label: 'amazon',
        value: 'amazon'
      }
    ]
  },
  {
    masterName: 'science',
    businessProcess: [{
        label: 'flipkart',
        value: 'flipkart'
      },
      {
        label: 'amazon',
        value: 'amazon'
      }
    ]
  },
  {
    masterName: 'it',
    businessProcess: [{
        label: 'email',
        value: 'email'
      },
      {
        label: 'amazon',
        value: 'amazon'
      }
    ]
  }
];
console.log(data1.filter((d) => {
  return data2.find((d2) => {
    //check if data matername equals data1 master
    // or if data1.process value exists in one of the item of businessProcess as value 
    return d2.masterName == d.master || d2.businessProcess.find(b => b.value === d.process);
  });

}));

Related