TypeScript多条件数组过滤:基于请求体条件生成结果集
TypeScript 实现多条件数组过滤功能
首先定义数据结构的类型,保证 TypeScript 的类型安全:
// 嵌套对象类型定义 interface Procedure { title: string; } interface Category { title: string; } interface Status { status: string; } interface Deadline { deadline: string; } // 主条目类型 interface Item { id: number; procedure: Procedure; category: Category; status: Status; deadline: Deadline; } // 过滤条件类型,所有字段可选,对应要筛选的目标值 interface FilterCriteria { status?: string; deadline?: string; categoryTitle?: string; procedureTitle?: string; }
接下来实现核心过滤函数,函数会逐一校验每个条目是否满足所有传入的过滤条件:
function filterItems(items: Item[], criteria: FilterCriteria): Item[] { return items.filter(item => { // 检查状态条件 if (criteria.status && item.status.status !== criteria.status) { return false; } // 检查截止日期条件 if (criteria.deadline && item.deadline.deadline !== criteria.deadline) { return false; } // 检查分类标题条件 if (criteria.categoryTitle && item.category.title !== criteria.categoryTitle) { return false; } // 检查流程标题条件 if (criteria.procedureTitle && item.procedure.title !== criteria.procedureTitle) { return false; } // 所有条件都满足则保留该条目 return true; }); }
使用示例
模拟从请求体获取过滤条件,结合示例数组进行过滤:
// 模拟请求体传入的过滤条件 const requestCriteria: FilterCriteria = { status: "IN PROCESS", deadline: "OUT OF DEADLINE" }; // 示例数组 const sampleItems: Item[] = [ { "id": 1513, "procedure": { "title": "Sample Procedure 1" }, "category": { "title": "Press" }, "status": { "status": "IN PROCESS" }, "deadline": { "deadline": "OUT OF DEADLINE" } }, { "id": 1514, "procedure": { "title": "Sample Procedure 2" }, "category": { "title": "Press" }, "status": { "status": "SUBMITTED" }, "deadline": { "deadline": "WITHIN DEADLINE" } } ]; // 执行过滤 const filteredItems = filterItems(sampleItems, requestCriteria); console.log(filteredItems); // 输出结果:[{ id: 1513, ... }]
扩展说明
- 如果需要支持更灵活的嵌套字段匹配,可以将
FilterCriteria改为Record<string, string>类型,结合路径解析逻辑(比如手动拆分字段路径)实现通用匹配,避免硬编码字段判断。 - 若要切换为或条件筛选,只需调整判断逻辑:只要满足任一条件就保留条目。
内容的提问来源于stack exchange,提问作者Pato
相关产品推荐
相关产品推荐

