我正在尝试将我的多个数组方法调用简化为 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)
});
我想简化我的代码并有一个数组过滤方法,然后根据相应的条件分配 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)
});