Javascript 如何创建具有可用时隙的对象数组

Javascript 如何创建具有可用时隙的对象数组,javascript,Javascript,在我的前端应用程序中,我正在获取一个用户的可用任命槽 实际上,我的API提供了如下可用日期: [“2021-02-20T10:00:00.000Z”, “2021-02-20T11:00:00.000Z”, “2021-02-21T08:00:00.000Z”, “2021-02-21T09:00:00.000Z”] 如你所见,有两个不同的日子,每个日子有两个不同的时间 我想要的是: [ { date: '2021-02-20T10:00:00.000Z',

在我的前端应用程序中,我正在获取一个用户的可用任命槽

实际上,我的API提供了如下可用日期:

[“2021-02-20T10:00:00.000Z”, “2021-02-20T11:00:00.000Z”, “2021-02-21T08:00:00.000Z”, “2021-02-21T09:00:00.000Z”]

如你所见,有两个不同的日子,每个日子有两个不同的时间

我想要的是:

[
    {
        date: '2021-02-20T10:00:00.000Z',
        slots: [
            {
                date: '2021-02-20T10:00:00.000Z'
            },
            {
                date: '2021-02-20T11:00:00.000Z'
            }
        ]
    },
    {
        date: '2021-02-21T08:00:00.000Z',
        slots: [
            {
                date: '2021-02-21T08:00:00.000Z'
            },
            {
                date: '2021-02-21T09:00:00.000Z'
            }
        ]
    },
]
因为我想展示两个不同的日期和内部,它们对应的时间。 你知道吗?我使用的是Quasar框架,所以我可以使用来自Quasar甚至Momentjs的Date()

谢谢


为@charlietfl编辑

@Get('/appointment/professionals/:id')
  async getAvailabilityProfessionals(@Req() req: Request, @Param('id') id: string, @Query() params: any) {
    const { from, to } = params
    const professional = await this.professionalsService.findProfessionalById(id)
    const thisDay = new Date(from)
    const lastDay = new Date(to)
    const data = professional.availability.filter(date => date >= thisDay && date <= lastDay)

    const grouped = data.reduce((a, c) => {
      const day = c.toString().slice(0, 10)
      a[day] = a[day] || { date: c, slots: [] }
      a[day].slots.push({ date: c })
      return a
    }, {})
    return Object.values(grouped)
  }
@Get('/appointment/professionals/:id')
异步getAvailabilityProfessionals(@Req()Req:Request,@Param('id')id:string,@Query()params:any){
常量{from,to}=params
const professional=等待此.professionalsService.findProfessionalById(id)
const thisDay=新日期(从)
const lastDay=新日期(到)
const data=professional.availability.filter(日期=>date>=thisDay&&date){
const day=c.toString().slice(0,10)
a[天]=a[天]|{日期:c,插槽:[]}
a[day].slots.push({date:c})
归还
}, {})
返回对象值(分组)
}

这似乎是一种直截了当的格式,因此我使用了拆分组合,以便能够以您想要的格式生成新字符串:D

let apiData=[“2021-02-20T10:00:00.000Z”、“2021-02-20T11:00:00.000Z”、“2021-02-21T08:00:00.000Z”、“2021-02-21T09:00:00.000Z”]
功能转换(arr){
返回arr.map(a=>{
var toSplitBy=a.split('T')[1]。split(':')[0]//返回介于T和:
var splitText=a.split(toSplitBy)//为插槽数组中的每个日期部分进行拆分,以便在再次组合时具有正确的值
return({//要返回的arr的每个索引的映射对象
日期:a,
插槽:[
{date:splitText[0]+(toSplitBy)+splitText[1]},
{日期:拆分文本[0]+(toSplitBy*1+1)+拆分文本[1]}
]
})
})
}
var convertedData=转换(apiData)

log(console.log)(convertedData)
这似乎是一种简单的格式,因此我使用了拆分组合,以便能够以您想要的格式生成新字符串:D

let apiData=[“2021-02-20T10:00:00.000Z”、“2021-02-20T11:00:00.000Z”、“2021-02-21T08:00:00.000Z”、“2021-02-21T09:00:00.000Z”]
功能转换(arr){
返回arr.map(a=>{
var toSplitBy=a.split('T')[1]。split(':')[0]//返回介于T和:
var splitText=a.split(toSplitBy)//为插槽数组中的每个日期部分进行拆分,以便在再次组合时具有正确的值
return({//要返回的arr的每个索引的映射对象
日期:a,
插槽:[
{date:splitText[0]+(toSplitBy)+splitText[1]},
{日期:拆分文本[0]+(toSplitBy*1+1)+拆分文本[1]}
]
})
})
}
var convertedData=转换(apiData)
console.log(convertedData)
您需要一个“groupBy”操作,其中使用公共值(唯一日期)作为对象键,并根据需要更新该对象或创建一个新对象

然后,一旦分组完成,就可以得到分组对象的值

const group=data.reduce((a,c)=>{
常数日=c.切片(0,10)
a[天]=a[天]|{日期:c,插槽:[]}
a[day].slots.push({date:c})
归还
},{})
const res=对象值(分组)
console.log(res)

常数数据=[“2021-02-20T10:00:00.000Z”,“2021-02-20T11:00:00.000Z”,“2021-02-21T08:00:00.000Z”,“2021-02-21T09:00:00.000Z”]
您需要一个“groupBy”操作,使用公共值(唯一日期)作为对象键,并根据需要更新该对象或创建一个新对象

然后,一旦分组完成,就可以得到分组对象的值

const group=data.reduce((a,c)=>{
常数日=c.切片(0,10)
a[天]=a[天]|{日期:c,插槽:[]}
a[day].slots.push({date:c})
归还
},{})
const res=对象值(分组)
console.log(res)

常数数据=[“2021-02-20T10:00:00.000Z”,“2021-02-20T11:00:00.000Z”,“2021-02-21T08:00:00.000Z”,“2021-02-21T09:00:00.000Z”]

简单地说,这是一个映射练习,有人可能会带来一个regex示例,以较少的代码行生成该格式的字符串(如返回部分中的数据是每个字符串的某个regex版本)。简单地说,这是一个映射练习,有人可能会带来一个regex示例,用更少的代码行生成该格式的字符串(就像返回部分中的数据是每个字符串的某个regex版本一样)。谢谢,它的工作方式与预期的一样!我想知道如何编辑它,因为我需要相同的东西,但是:我需要API每天返回一次,即使它们没有插槽。实际上,在参数中给出的GET调用有两个日期(from和to),API返回每个可用的日期,就像我的第一篇文章一样。但我最终需要的是,API每天都返回,即使它们没有插槽。thanksI编辑了主要主题,以显示我的实际工作代码,如果您有时间查看,谢谢,它的工作方式与预期的一样!我想知道如何编辑它,因为我需要相同的东西,但是:我需要API每天返回一次,即使它们没有插槽。实际上,在参数中给出的GET调用有两个日期(from和to),API返回每个可用的日期,就像我的第一篇文章一样。但我最终需要的是,API每天都返回,即使它们没有插槽。thanksI编辑了主要主题以显示我的实际工作代码,如果您有时间查看的话