#javascript #arrays #if-statement #conditional-statements #variable-assignment
#язык JavaScript #массивы #если-заявление #условные утверждения #присвоение переменной
Вопрос:
Я хотел бы упростить свой код и использовать один метод фильтрации массива, а затем назначить предупреждения const на основе соответствующих условий вместо 5 методов фильтрации массива. Возможно, утверждение «если» или что-то в этом роде сделало бы трюк?
const pendingAlerts = array.filter((a) =gt; a.approval_status === approvalStatuses.pending amp;amp; !a.canceled_at).sort(sortCommunicationsByDateRule); const deniedAlerts = array.filter((a) =gt; a.approval_status === approvalStatuses.denied amp;amp; !a.canceled_at).sort(sortCommunicationsByDateRule); const upcomingAlerts = array.filter((a) =gt; isApproved(a) amp;amp; !a.canceled_at amp;amp; a.begin_at gt; today).sort(sortCommunicationsByDateRule); const activeAlerts = array.filter((a) =gt; isApproved(a) amp;amp; !a.canceled_at amp;amp; a.begin_at lt;= today amp;amp; a.end_at gt; today).sort(sortCommunicationsByDateRule); const expiredAlerts = array.filter((a) =gt; (a.canceled_at || a.end_at lt; today)).sort(sortCommunicationsByDateRule); lt;div className="comm-communication-list comm-alert-list wrapper"gt; {this.renderNotificationUI()} {this.renderDefinitionList(pendingAlerts)} {this.renderDefinitionList(upcomingAlerts)} {this.renderDefinitionList(activeAlerts)} {this.renderDefinitionList(deniedAlerts)} {this.renderDefinitionList(expiredAlerts)} lt;/divgt; //The ReactJS list above is rendering the Alert variables i.e.(pending, upcoming, active, denied, and expired) based upon the robust multiple filter methods
Ответ №1:
Вы можете сделать это, пройдя один раз по входному массиву, проверив каждый из критериев для включения в один из выходных массивов. Вы также можете использовать данные для связи критерия с выходным массивом…
const pendingAlerts = []; const deniedAlerts = []; const upcomingAlerts = []; // and so on... const criteria = [ { array: pendingAlerts, criterion: a =gt; a.approval_status === approvalStatuses.pending amp;amp; !a.canceled_at }, { array: deniedAlerts, criterion: a =gt; a.approval_status === approvalStatuses.denied amp;amp; !a.canceled_at }, { array: upcomingAlerts, criterion: a =gt; isApproved(a) amp;amp; !a.canceled_at amp;amp; a.begin_at gt; today }, // and so on ]; // this one loop pushes a into each of the output arrays where it matches the criterion array.forEach(a =gt; { criteria.forEach(c =gt; if (c.criterion(a)) c.array.push(a)); }); // then sort the output arrays... criteriaForEach(c =gt; { c.array.sort(sortCommunicationsByDateRule) });