[英]How to fill missing dates inside array of object using javascript?
I want to fill this object from today's date to next 7 days.我想从今天到接下来的 7 天填写这个 object。 Here is my object这是我的 object
let obj = {
"sessions": [{
"id": 0,
"available_capacity": 3,
"date": "15-05-2021"
},
{
"id": 1,
"available_capacity": 5,
"date": "16-05-2021"
},
{
"id": 2,
"available_capacity": 2,
"date": "18-05-2021"
}]
}
Expected output:预期 output:
let output = {
"sessions": [{
"date": "14-05-2021"
},
{
"id": 0,
"available_capacity": 3,
"date": "15-05-2021"
},
{
"id": 1,
"available_capacity": 5,
"date": "16-05-2021"
},
{
"date": "17-05-2021"
},
{
"id": 2,
"available_capacity": 2,
"date": "18-05-2021"
},
{
"date": "19-05-2021"
},
{
"date": "20-05-2021"
}]
}
Here is the code to generate array of dates from today to next 7 days这是生成从今天到接下来 7 天的日期数组的代码
function getWeekDates() { let dates = []; for (let i = 0; i <= 6; i++) { dates.push(new Date(Date.now() + 1000 * 3600 * (i * 24)).toLocaleDateString('en-GB').replace('/', '-').replace('/', '-')); } console.log(dates); } getWeekDates(); //result: ["14-05-2021", "15-05-2021", "16-05-2021", "17-05-2021", "18-05-2021", "19-05-2021", "20-05-2021"]
How can I fill in the missing dates?如何填写缺少的日期?
You can use this code to generate the dates array.您可以使用此代码生成日期数组。 You can pass the startDate and numberOfDays you need.您可以传递您需要的 startDate 和 numberOfDays。 In your case you can just dateRange(new Date(), 7)
在你的情况下,你可以dateRange(new Date(), 7)
const DAY_IN_MS = 24 * 60 * 60 * 1000 const dateRange = (startDate, numOfDays) => { const startDateInMs = startDate.getTime() return [...Array(numOfDays).keys()].map(i => new Date(startDateInMs + i * DAY_IN_MS).toISOString().slice(0,10)) } let dates = dateRange(new Date(),7); console.log(dates);
You can use Array.prototype.map
and return the check if date exists in obj.sessions using Array.prototype.find
then return the object otherwise just return the same date.您可以使用Array.prototype.map
并使用Array.prototype.find
返回检查日期是否存在于 obj.sessions 中,然后返回 object 否则只返回相同的日期。 Array.prototype.find
returns undefined if item doesn't exist.如果 item 不存在,则Array.prototype.find
返回 undefined。
let obj = { "sessions": [{ "id": 0, "available_capacity": 3, "date": "15-05-2021" }, { "id": 1, "available_capacity": 5, "date": "16-05-2021" }, { "id": 2, "available_capacity": 2, "date": "18-05-2021" }] } function getWeekDates() { let dates = []; for (let i = 0; i <= 6; i++) { dates.push(new Date(Date.now() + 1000 * 3600 * (i * 24)).toLocaleDateString('en-GB').replace('/', '-').replace('/', '-')); } return dates; } let dates = getWeekDates(); let r = dates.map(d => { let o = obj.sessions.find(x => x.date === d); return o?? {date: d} }); console.log(r);
You are looking for something like below.你正在寻找类似下面的东西。
function getWeekDates() {
let dates = [];
for (let i = 0; i <= 6; i++) {
dates.push(new Date(Date.now() + 1000 * 3600 * (i * 24)).toLocaleDateString('en-GB').replace('/', '-').replace('/', '-'));
}
return dates
}
getWeekDates().map(date => {
return obj.sessions.find(s => s.date === date) || date
})
/*
Output
[
{
"date": "14-05-2021"
},
{
"id": 0,
"available_capacity": 3,
"date": "15-05-2021"
},
{
"id": 1,
"available_capacity": 5,
"date": "16-05-2021"
},
{
"date": "17-05-2021"
},
{
"id": 2,
"available_capacity": 2,
"date": "18-05-2021"
},
{
"date": "19-05-2021"
},
{
"date": "20-05-2021"
}
]
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.