Javascript 基于值列表筛选对象数组

Javascript 基于值列表筛选对象数组,javascript,reactjs,typescript,react-native,Javascript,Reactjs,Typescript,React Native,我有一个数组,如下所示 array = [ { name: 'A' instructors: [ { name:'InsA' } ] businessUnit: {name:'myBusiness'} }, { name: 'B' instructors: [ { name:'InsB' } ] businessUnit: {name:'myBusinessB'} } ] nameArr = [A,C,D] inst

我有一个数组,如下所示

array = [
{
  name: 'A'
  instructors: [
   {
     name:'InsA'
   }
  ]
  businessUnit: {name:'myBusiness'}
},
{
  name: 'B'
  instructors: [
   {
     name:'InsB'
   }
  ]
  businessUnit: {name:'myBusinessB'}
}

]
nameArr = [A,C,D]
instructorArr = [InsA,InsC,InsZ]
businessName = [myBusinessB,myBusinessX,myBusinessD]
const filtered = _.filter(groupActivityList, (obj) => {
      return (
        obj.name === (groupClassFilter !== defaultFilter ? groupClassFilter : obj.name) &&
        obj.instructors.length > 0 &&
        obj.instructors[0]?.name ===
          (groupInstructorFilter !== defaultFilter
            ? groupInstructorFilter
            : obj.instructors.length > 0 && obj.instructors[0]?.name) &&
        obj.businessUnit.name ===
          (groupFacilityFilter !== defaultFilter ? groupFacilityFilter : obj.businessUnit.name)
      );
    });
我想用数组中的值筛选这个数组,如下所示

array = [
{
  name: 'A'
  instructors: [
   {
     name:'InsA'
   }
  ]
  businessUnit: {name:'myBusiness'}
},
{
  name: 'B'
  instructors: [
   {
     name:'InsB'
   }
  ]
  businessUnit: {name:'myBusinessB'}
}

]
nameArr = [A,C,D]
instructorArr = [InsA,InsC,InsZ]
businessName = [myBusinessB,myBusinessX,myBusinessD]
const filtered = _.filter(groupActivityList, (obj) => {
      return (
        obj.name === (groupClassFilter !== defaultFilter ? groupClassFilter : obj.name) &&
        obj.instructors.length > 0 &&
        obj.instructors[0]?.name ===
          (groupInstructorFilter !== defaultFilter
            ? groupInstructorFilter
            : obj.instructors.length > 0 && obj.instructors[0]?.name) &&
        obj.businessUnit.name ===
          (groupFacilityFilter !== defaultFilter ? groupFacilityFilter : obj.businessUnit.name)
      );
    });
如果我必须只使用一个值进行检查,If可以过滤这个数组,如下所示

array = [
{
  name: 'A'
  instructors: [
   {
     name:'InsA'
   }
  ]
  businessUnit: {name:'myBusiness'}
},
{
  name: 'B'
  instructors: [
   {
     name:'InsB'
   }
  ]
  businessUnit: {name:'myBusinessB'}
}

]
nameArr = [A,C,D]
instructorArr = [InsA,InsC,InsZ]
businessName = [myBusinessB,myBusinessX,myBusinessD]
const filtered = _.filter(groupActivityList, (obj) => {
      return (
        obj.name === (groupClassFilter !== defaultFilter ? groupClassFilter : obj.name) &&
        obj.instructors.length > 0 &&
        obj.instructors[0]?.name ===
          (groupInstructorFilter !== defaultFilter
            ? groupInstructorFilter
            : obj.instructors.length > 0 && obj.instructors[0]?.name) &&
        obj.businessUnit.name ===
          (groupFacilityFilter !== defaultFilter ? groupFacilityFilter : obj.businessUnit.name)
      );
    });
当我有一组要过滤的值时,如何进行过滤,例如:
nameArr=[a,C,D]

如果我正确理解了问题,您可以使用该属性


您可以使用
fiterObj.names.some(name=>name===obj.name)进行检查,而不是检查
obj.name===fiterObj.name
如果
namesArr
中的任何元素与对象的名称匹配,将返回true

使用
array.prototype.some
array.prototype.includes筛选数组的示例:

const数组=[{
名称:‘A’,
教员:[{
名称:“InsA”
}],
业务单位:{
名称:“myBusinessA”
}
},
{
名称:‘B’,
教员:[{
姓名:'InsB'
}],
业务单位:{
名称:“myBusinessB”
}
},
{
名称:“Z”,
教员:[{
名称:'InsZZ'
}],
业务单位:{
名称:“myBusinessZZ”
}
}
];
常量nameArr=['A','C','D']
const instructorArr=['InsA','InsC','InsZ']
const businessName=['myBusinessB','myBusinessX','myBusinessD','myBusinessA']
const filtered=array.filter(el=>nameArr.includes(el.name)&&el.instructors.some(ins=>instructorArr.some(iA=>ins.name==iA))&&
businessName.includes(el.businessUnit.name)
);

console.log(过滤)我没有编辑你的筛选函数,因为你有不同的条件不属于这个问题(如
groupFacilityFilter
defaultFilter
等)。如何仅在满足所有3个条件时返回数据?我使用了&&而不是| |,但是它返回一个空值array@CraZyDroiD这是因为数组中没有匹配所有条件的元素。已更新数组以包含满足筛选器的元素,请立即检查。