[英]Reduce of empty array with no initial value
我正在使用fullcalendar-react,我有以下時間表,我正在嘗試獲取列表的最早時間並刪除已關閉的日期:
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
}
為了過濾關閉的日子並獲得最早的時間,我正在使用filter和reduce,如下所示:
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;
}
當我打開日歷時,我收到此錯誤:
未捕獲的TypeError:減少沒有初始值的空數組
當列表為空時,我試圖提供, moment('00:00', 'HH:mm')
作為默認值,但是像這樣,我的日歷始終在午夜開始,忽略其余的,我想。
- - -編輯 - - -
代碼實際上是在做它的工作,因為午夜早於08:00,它將顯示午夜。 唯一的事情是只有當列表為空時才顯示午夜。
當我處理片刻()時,我該如何解決這個問題? 謝謝!
嘗試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
演示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.