我正在尝试将我的多个数组方法调用简化为 if 语句或基于条件的更简单的东西

I am trying to simplify my multiple array method calls into an if statement or something much more simple based on a condition

我想简化我的代码并有一个数组过滤方法,然后根据相应的条件分配 const Alerts,而不是 5 个数组过滤方法。也许 if 语句或类似的东西可以解决问题?

    const pendingAlerts = array.filter((a) => a.approval_status === approvalStatuses.pending && !a.canceled_at).sort(sortCommunicationsByDateRule);
    const deniedAlerts = array.filter((a) => a.approval_status === approvalStatuses.denied && !a.canceled_at).sort(sortCommunicationsByDateRule);
    const upcomingAlerts = array.filter((a) => isApproved(a) && !a.canceled_at && a.begin_at > today).sort(sortCommunicationsByDateRule);
    const activeAlerts = array.filter((a) => isApproved(a) && !a.canceled_at && a.begin_at <= today && a.end_at > today).sort(sortCommunicationsByDateRule);
    const expiredAlerts = array.filter((a) => (a.canceled_at || a.end_at < today)).sort(sortCommunicationsByDateRule); 

    
        <div className="comm-communication-list comm-alert-list wrapper">
          {this.renderNotificationUI()}
          {this.renderDefinitionList(pendingAlerts)}
          {this.renderDefinitionList(upcomingAlerts)}
          {this.renderDefinitionList(activeAlerts)}
          {this.renderDefinitionList(deniedAlerts)}
          {this.renderDefinitionList(expiredAlerts)}
        </div> 

  //The ReactJS list above is rendering the Alert variables  i.e.(pending, upcoming, active, denied, and expired)  based upon the robust multiple filter methods 

您只需遍历输入数组一次即可完成此操作,测试包含在其中一个输出数组中的每个条件。您还可以使用数据将条件与输出数组相关联...

const pendingAlerts = [];
const deniedAlerts = [];
const upcomingAlerts = [];
// and so on...

const criteria = [
  {
    array: pendingAlerts,
    criterion: a => a.approval_status === approvalStatuses.pending && !a.canceled_at
  },
  {
    array: deniedAlerts,
    criterion: a => a.approval_status === approvalStatuses.denied && !a.canceled_at
  },
  {
    array: upcomingAlerts,
    criterion: a => isApproved(a) && !a.canceled_at && a.begin_at > today
  },
  // and so on
];

// this one loop pushes a into each of the output arrays where it matches the criterion
array.forEach(a => {
  criteria.forEach(c => if (c.criterion(a)) c.array.push(a));
});

// then sort the output arrays...
criteriaForEach(c => {
  c.array.sort(sortCommunicationsByDateRule)
});