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这是因为数组中没有匹配所有条件的元素。已更新数组以包含满足筛选器的元素,请立即检查。