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

如何将React中多轮数组filter调用简化为单逻辑或if分支实现

实现方案

你可以通过单轮遍历加条件分支完成所有告警的分类,仅遍历原数组1次就能替代原来的5次filter调用,最终输出的结果和原有逻辑完全一致,后续的渲染代码不需要做任何修改。

代码实现

// 初始化各状态告警的空数组
const pendingAlerts = [];
const deniedAlerts = [];
const upcomingAlerts = [];
const activeAlerts = [];
const expiredAlerts = [];

// 单轮遍历完成全部分类
array.forEach(alertItem => {
  // 优先判断过期/取消状态,和原逻辑优先级保持一致
  if (alertItem.canceled_at || alertItem.end_at < today) {
    expiredAlerts.push(alertItem);
    return;
  }
  // 非过期项判断审批状态
  if (alertItem.approval_status === approvalStatuses.pending) {
    pendingAlerts.push(alertItem);
  } else if (alertItem.approval_status === approvalStatuses.denied) {
    deniedAlerts.push(alertItem);
  } else if (isApproved(alertItem)) {
    // 审批通过的项按时间区间分类
    if (alertItem.begin_at > today) {
      upcomingAlerts.push(alertItem);
    } else if (alertItem.begin_at <= today && alertItem.end_at > today) {
      activeAlerts.push(alertItem);
    }
  }
});

// 对各分类数组执行排序
pendingAlerts.sort(sortCommunicationsByDateRule);
deniedAlerts.sort(sortCommunicationsByDateRule);
upcomingAlerts.sort(sortCommunicationsByDateRule);
activeAlerts.sort(sortCommunicationsByDateRule);
expiredAlerts.sort(sortCommunicationsByDateRule);

优化说明

  • 分类判断的优先级和原有filter逻辑完全对齐,优先匹配过期/取消条件,避免和其他状态的判断产生冲突
  • 如果你想简化排序部分的重复代码,也可以封装公共排序方法:const sortAlertList = arr => arr.sort(sortCommunicationsByDateRule),再分别调用即可

内容的提问来源于stack exchange,提问作者evan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:04