Уменьшение пустого массива без начального значения - PullRequest
3 голосов
/ 14 июня 2019

Я работаю с fullcalendar-реагировать, и у меня есть следующее расписание, где я пытаюсь получить самый ранний час в списке и убрать закрытые дни:

export default {
    monday: {
        startTime: '10:00',
        endTime: '23:00'
    },
    tuesday: {
        startTime: '08:00',
        endTime: '00:00'
    },
    wednesday: {
        startTime: '09:00',
        endTime: '22:00'
    },
    thursday: {
        startTime: '14:00',
        endTime: '00:00'
    },
    friday: undefined,
    saturday: {
        startTime: '13:00',
        endTime: '21:00'
    },
    sunday: undefined
}

Чтобы отфильтровать закрытые дни и получить самый ранний час, я работаю с фильтрами и сокращениями, как показано ниже:

getOpeningHour() {
    let value: any = "00:00:00";

    if (this.props.schedule) {
        const schedule = this.props.schedule; // the schedule I presented above

        if (Object.keys(schedule).length >= 1) {
            const minValue = Object.keys(schedule)
                .filter((key) => schedule[key])
                .map((key: string) => moment(schedule[key].startTime, 'HH:mm'))
                .reduce((min: moment.Moment, value: moment.Moment) => (!min || value.isBefore(min) ? value : min), moment('00:00', 'HH:mm')); 
                // Gets the earliest hour when the list is not empty, but when I give midnight as default value, it's always midnight.

            value = minValue.format('HH:mm:ss');
        }
    }
    return value;
}

Когда я открываю календарь, я получаю эту ошибку:

Uncaught TypeError: Уменьшение пустого массива без начального значения

Я пытался указать , moment('00:00', 'HH:mm') в качестве значения по умолчанию, когда список пуст, но вот так мой календарь всегда начинается в полночь и, я думаю, игнорирует все остальное.

----- EDIT -----

Код фактически выполняет свою работу, и, поскольку полночь раньше 08:00, он будет отображать полночь. Единственное - отображать полночь только тогда, когда список пуст.

Как я могу исправить эту проблему, когда я работаю с моментом () часов? Спасибо!

1 Ответ

2 голосов
/ 14 июня 2019

Попробуйте moment('24:00', 'HH:mm'):

const hourTemplate = 'HH:mm';

const getEarliersHour = schedule =>
  Object.values(schedule)
    .filter(value => value)                  // no undefined
    .map(time => moment(time.startTime, hourTemplate))
    .reduce(
      (min, curr) => (curr.isBefore(min) ? curr : min),
      moment('24:00', hourTemplate)         // latest moment
    )
    .format(hourTemplate);

getEarliersHour(schedule);                  // 08:00
getEarliersHour({});                        // 00:00

Демо-версия:

Edit cold-sunset-oc7fy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...