简体   繁体   English

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

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

I would like to simplify my code and have one array filtering method and then assign the const Alerts based upon the corresponding conditions, instead of 5 array filtering methods.我想简化我的代码并拥有一种数组过滤方法,然后根据相应的条件分配 const 警报,而不是 5 种数组过滤方法。 Perhaps an if statement or something of the like would do the trick?也许 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 

You can get this done with one trip through the input array, testing each of the criteria for inclusion in one of the output arrays.您可以通过一次输入数组来完成此操作,测试每个标准以包含在 output arrays 之一中。 You can also use data to associate the criterion with the output array...您还可以使用数据将标准与 output 数组关联...

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)
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM