如何利用多filterBy条件值过滤对象数组?
对象数组多条件组合过滤实现
问题描述
现有员工信息对象数组 arrayData,以及过滤条件数组 filterBy,需要根据 filterBy 中的任意组合条件筛选出符合要求的对象:
senior/junior:匹配对应职位的员工missing_contact_info:匹配电话(phone)或地址(address)为空字符串/ null的员工
支持的组合场景包括但不限于:仅筛选senior、senior+junior、全部三个条件、senior+missing_contact_info等。
实现思路
- 给每个过滤条件单独定义判断逻辑,便于后续维护扩展
- 遍历原始数组,检查每个对象是否满足
filterBy中的至少一个条件(组合条件为“或”关系) - 兼容
filterBy为空数组的情况,直接返回原数组
代码实现
const arrayData = [ { name: 'abc', designation: 'senior', phone: '3589234556', address: 'Address 1' }, { name: 'pqr', designation: 'junior', phone: '', address: 'Address 2' }, { name: 'xyz', designation: 'senior', phone: '3589234557', address: '' } ]; // 定义各过滤条件的判断规则 const conditionCheckers = { senior: item => item.designation === 'senior', junior: item => item.designation === 'junior', missing_contact_info: item => { const isPhoneEmpty = item.phone === '' || item.phone === null; const isAddressEmpty = item.address === '' || item.address === null; return isPhoneEmpty || isAddressEmpty; } }; // 通用过滤函数 const filterEmployees = (data, filterBy) => { if (!filterBy.length) return [...data]; return data.filter(item => filterBy.some(condition => conditionCheckers[condition](item))); }; // 测试各场景 console.log("仅senior:", filterEmployees(arrayData, ['senior'])); console.log("senior+junior:", filterEmployees(arrayData, ['senior','junior'])); console.log("全部条件:", filterEmployees(arrayData, ['senior','junior','missing_contact_info'])); console.log("senior+缺失联系信息:", filterEmployees(arrayData, ['senior','missing_contact_info']));
代码说明
conditionCheckers:把每个过滤条件映射到对应的判断函数,新增条件时只需在这里添加新的键值对即可filterEmployees:核心过滤逻辑,用filter遍历数组,some判断对象是否符合任一筛选条件- 测试代码覆盖了所有提到的场景,可直接运行验证结果
内容的提问来源于stack exchange,提问作者Tushar kharat
相关产品推荐
相关产品推荐

