Как выбрать, с каким массивом выполнять операцию в зависимости от состояния?

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я делаю что-то отвратительное, чтобы выбрать, какой массив отображать в зависимости от того, имеет ли shownAppointmens длину 0 или нет.

  {shownAppointments.length
        ? shownAppointments
            .flat()
            .map((appointment) => (
              <AppointmentCard
                appointment={appointment}
              />
            ))
        : blockedDates
            .flat()
            .map((appointment) => (
              <AppointmentCard
                appointment={appointment}
              />
            ))}
  

Интересно, можно ли это упростить, выбрав либо shownAppointments, либо blockedDates, а не повторять flat() и все, что следует за ним. Что-то вроде

 (shownAppointments ? shownAppointments : blockedDates).flat()
  

Комментарии:

1. Да, вы можете, за исключением того, что вы забыли .length в условии: (shownAppointments.length ? shownAppointments : blockedDates).flat().map(/*...*/)

Ответ №1:

Пример

Вы можете разделить логику отображения массива на отдельную константу и использовать все необходимые методы цепочки для этой константы.

 const hasAppointments = !!shownAppointments.length;

const list = hasAppointments ? [...showAppointments] : [...blockedDates]

list
   .flat()
   .map((appointment) => (
       <AppointmentCard
         appointment={appointment}
       />
    ))
  

Комментарии:

1. ваш первый ответ сработал нормально! Это то, что я сделал —-> const chosenArray = shownAppointments . длина? Показанные назначения: назначения;

2. @uber Рад, что смог помочь. Не могли бы вы отметить ответ как правильный, если это так?