简体   繁体   English

如何使用 javascript 填充 object 数组中缺失的日期?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM