這是我的資料庫結構:
[
{
"schedule_time": "2021-05-17 12:39:29",
"slot": "L",
"item_date": "2021-05-18"
},
{
"schedule_time": "2021-05-17 12:47:53",
"slot": "D",
"item_date": "2021-05-18"
},
{
"schedule_time": "2021-05-18 13:55:22",
"slot": "D",
"item_date": "2021-05-19"
},
{
"schedule_time": "2021-05-19 16:09:15",
"slot": "L",
"item_date": "2021-05-20"
},
{
"schedule_time": "2021-05-19 16:11:55",
"slot": "L",
"item_date": "2021-05-20"
},
我想創建一個函式來獲取item_date,它將顯示上午 9 點到 12 點之間有多少個時間表。前幾天的上午 12 點至下午 3 點、下午 3 點至下午 6 點、下午 6 點至晚上 9 點。如果您查看資料庫,item_date 和 schedule_date 是不一樣的。這就是為什么我希望將前一天的日程安排在一個陣列中。
我創建了一個函式,它只回傳上午 9 點到 12 點的資料。我希望將時間表放在一個陣列中。
function schedulesList (date){
let dbItemDate = date;
let otherDayArray = schedules.filter(num => num.item_date !== dbItemDate); // not equal because I want other dates schedules not the exact date
let times = otherDayArray?.filter(num => num.schedule_time.split(' ')[1] >= '12:00:00' && num.schedule_time.split(' ')[1] <= '14:00:00');
console.log('9am to 12pm', times.length, 'schedules') //
}
預期的結果應該與此類似:
[
'9am to 12pm' : 2,
'12pm to 3pm' : 0,
'3pm to 6pm' : 1,
'6pm to 9pm' : 3,
]
uj5u.com熱心網友回復:
假設您已將給定的輸入陣列存盤在名為data.
let data = [{
"schedule_time": "2021-05-17 12:39:29",
"slot": "L",
"item_date": "2021-05-18"
},
{
"schedule_time": "2021-05-17 12:47:53",
"slot": "D",
"item_date": "2021-05-18"
},
{
"schedule_time": "2021-05-18 13:55:22",
"slot": "D",
"item_date": "2021-05-19"
},
{
"schedule_time": "2021-05-19 16:09:15",
"slot": "L",
"item_date": "2021-05-21"
},
{
"schedule_time": "2021-05-19 16:11:55",
"slot": "L",
"item_date": "2021-05-20"
}
];
//function to get the final results
let getScheduleCounter = (date) => {
let scheduleCounter = {
'9_12': [],
'12_3': [],
'3_6': [],
'6_9': []
};
data.forEach(sch => {
if (sch.item_date !== date) {
updateScheduledCounter(sch, scheduleCounter);
}
});
return scheduleCounter;
}
//function to get the count and update in scheduleCounter
let updateScheduledCounter = (sch, scheduleCounter) => {
let time = sch.schedule_time.split(' ')[1];
switch (!!time) {
case (time <= '12:00:00'):
scheduleCounter['9_12'] ;
break;
case (time >= '12:00:00' && time <= '15:00:00'):
scheduleCounter['12_3'] ;
break;
case (time >= '15:00:00' && time <= '18:00:00'):
scheduleCounter['3_6'] ;
break;
case (time >= '18:00:00' && time <= '21:00:00'):
scheduleCounter['6_9'] ;
break;
}
}
let schedules = getScheduleCounter("2021-05-20");
console.log('schedules: ', schedules);
uj5u.com熱心網友回復:
我建議采用以下解決方法
const schedules = [
{"schedule_time": "2021-05-17 12:39:29","slot": "L","item_date": "2021-05-18"},
{"schedule_time": "2021-05-17 12:47:53","slot": "D","item_date": "2021-05-18"},
{"schedule_time": "2021-05-18 13:55:22","slot": "D","item_date": "2021-05-19"},
{"schedule_time": "2021-05-19 16:09:15","slot": "L","item_date": "2021-05-20"},
{"schedule_time": "2021-05-19 16:11:55","slot": "L","item_date": "2021-05-20"}];
const hours = [
{hoursName: '9am to 12pm', from: 9, to: 12},
{hoursName: '12pm to 3pm', from: 12, to: 15},
{hoursName: '3pm to 6pm', from: 15, to: 18},
{hoursName: '6pm to 9pm', from: 18, to: 21}];
const targetDate = new Date("2021-05-20");
const previousItems = schedules.filter(({ schedule_time }) => {
const scheduleTime = new Date(schedule_time);
return scheduleTime < targetDate;
});
const result = previousItems.reduce((acc, { schedule_time }) => {
const scheduleTime = new Date(schedule_time);
const targetHour = scheduleTime.getHours();
const { hoursName } = hours.find(({ from, to }) => (targetHour >= from) && (targetHour < to));
acc[hoursName] = (acc[hoursName] ?? 0) 1;
return acc;
}, {});
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421579.html
標籤:
