根据属性值比较两个对象数组,然后返回匹配的对象

时间:2020-10-21 06:26:20

标签: javascript arrays

HI我拥有两个对象数组,我的目的是比较它们并过滤出匹配的结果 我的数据看起来像这样

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' }
        ]
    }

如果data1的主数据与data2的masterName匹配,并且data1的业务与data2的businessProcess.label匹配,我想将data1与data2进行比较,并从data2返回匹配项。

有人可以告诉我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Array.filterArray.find遍历并找到匹配的项目:

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);
  });

}));