Me gustaría simplificar mi código y tener un método de filtrado de matriz y luego asignar las Alertas const basadas en las condiciones correspondientes, en lugar de 5 métodos de filtrado de matriz. ¿Quizás una declaración if o algo similar haría el truco?
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 ie(pending, upcoming, active, denied, and expired) based upon the robust multiple filter methodsPuede hacer esto con un viaje a través de la matriz de entrada, probando cada uno de los criterios para su inclusión en una de las matrices de salida. También puede usar datos para asociar el criterio con la matriz de salida...
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) });