You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:32:37