[英]filter array of objects based on list of values
我有一個數組如下
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)
);
});
當我有一組值要過濾時,我如何過濾 Ex: nameArr = [A,C,D]
使用Array.prototype.some
和Array.prototype.includes
過濾數組的示例:
const array = [{ name: 'A', instructors: [{ name: 'InsA' }], businessUnit: { name: 'myBusinessA' } }, { name: 'B', instructors: [{ name: 'InsB' }], businessUnit: { name: 'myBusinessB' } }, { name: 'Z', instructors: [{ name: 'InsZZ' }], businessUnit: { name: 'myBusinessZZ' } } ]; const 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(filtered);
如果我正確理解問題,您可以使用Array#some屬性。
代替檢查obj.name === filterObj.name
,您可以使用fiterObj.names.some(name => name === obj.name)
進行檢查,如果namesArr
中的任何元素與對象的名稱匹配,它將返回 true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.