Я пытаюсь упростить свои вызовы метода множественного массива в оператор if или что-то гораздо более простое, основанное на условии

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