我有以下物件陣列
const monthlyList = [
{
"leave_id":119,
"employee_id":"25528",
"from_date":"2022-03-10",
"to_date":"2022-03-11",
"employee_name":"Name 1"
},
{
"leave_id":120,
"employee_id":"25529",
"from_date":"2022-03-10",
"to_date":"2022-03-13",
"employee_name":"Name 2"
},
{
"leave_id":121,
"employee_id":"25530",
"from_date":"2022-03-15",
"to_date":"2022-03-18",
"employee_name":"Name 3"
},
{
"leave_id":123,
"employee_id":"25530",
"from_date":"2022-03-20",
"to_date":"2022-03-20",
"employee_name":"Name 3"
}
]
我正在嘗試使用 FullCalendar 在日歷中顯示每天的休假事件數。為此,我正在嘗試獲取以下格式的陣列
[
{
"date":"2022-03-10",
"count":2
},
{
"date":"2022-03-11",
"count":2
},
{
"date":"2022-03-12",
"count":1
}
--- etc
]
也就是說,如果在同一日期有兩片葉子,則計數應為 2。此外,它應該計算 from_date 和 to_date 之間所有日期的計數,以便我可以在日歷上顯示所有日期的計數介于范圍之間。
我使用以下代碼進行lodash分組,from_date然后to_date我可以從那里創建上面的陣列。但不知道如何在這之間的日子里做到這一點
let groupedListFrom = _.groupBy(monthlyList, "from_date");
let groupedListTo = _.groupBy(monthlyList, "to_date");
如果有人可以在這里幫助我,那將非常有幫助。謝謝
uj5u.com熱心網友回復:
使用reduce而不是 Lodash 的可能方法。
我使用https://gist.github.com/miguelmota/7905510作為助手來獲取兩個給定日期之間的 Date 物件。
const monthlyList = [
{
"leave_id":119,
"employee_id":"25528",
"from_date":"2022-03-10",
"to_date":"2022-03-11",
"employee_name":"Name 1"
},
{
"leave_id":120,
"leave_id":"25529",
"from_date":"2022-03-10",
"to_date":"2022-03-13",
"employee_name":"Name 2"
},
{
"leave_id":121,
"employee_id":"25530",
"from_date":"2022-03-15",
"to_date":"2022-03-18",
"employee_name":"Name 3"
},
{
"leave_id":123,
"employee_id":"25530",
"from_date":"2022-03-20",
"to_date":"2022-03-20",
"employee_name":"Name 3"
}
]
//a function to get Date objects between two given dates (inclusive)
//https://gist.github.com/miguelmota/7905510
const getDates = (startDate, endDate) => {
const dates = []
let currentDate = startDate
const addDays = function (days) {
const date = new Date(this.valueOf())
date.setDate(date.getDate() days)
return date
}
while (currentDate <= endDate) {
dates.push(currentDate)
currentDate = addDays.call(currentDate, 1)
}
return dates
}
let x = Object.values(monthlyList.reduce((acc,{leave_id,employee_id,from_date,to_date,employee_name})=>{
const dates = getDates(new Date(from_date), new Date(to_date));
dates.forEach((date) => {
let strippedDate = date.toISOString().substring(0,10);
if(!acc[strippedDate])acc[strippedDate]={date:strippedDate,count:0};
acc[strippedDate].count =1
})
return acc;
},{}))
console.log(x)
uj5u.com熱心網友回復:
var DateTime = require('luxon').DateTime;
let leavesArray = {};
monthlyList.forEach(x => {
let a = DateTime.fromFormat(x.from_date,"yyyy-MM-dd")
let b = DateTime.fromFormat(x.to_date,"yyyy-MM-dd")
while (a <= b) {
let date = a.toFormat("yyyy-MM-dd");
if (leavesArray[date]) {
leavesArray[date]["count"] ;
} else {
leavesArray[date] = {}
leavesArray[date]["count"] = 1;
} a = a.plus({days: 1})
}
})
Node Js 作業解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439306.html
標籤:javascript 数组 json 罗达什
