Javascript 根据预定的时隙将可用时隙数组拆分为块
我有两个阵列:Javascript 根据预定的时隙将可用时隙数组拆分为块,javascript,arrays,lodash,chunks,Javascript,Arrays,Lodash,Chunks,我有两个阵列: 从一天的特定开始时间到结束时间生成的时间戳(每个(每个时间戳相差1800个)) 我从API响应中获得预定的插槽响应 我需要合并两个数组以形成表示可用和预订插槽的对象数组: let availableTimeslots=[ 1559709000, 1559710800, 1559712600, 1559714400, 1559716200, 1559718000, 1559719800, 1559721600, 1559723400, 1559725200, 1559727000
(每个时间戳相差1800个)
)李>
let availableTimeslots=[
1559709000,
1559710800,
1559712600,
1559714400,
1559716200,
1559718000,
1559719800,
1559721600,
1559723400,
1559725200,
1559727000,
1559728800,
1559730600,
1559732400,
1559734200,
1559736000,
1559737800,
1559739600
];
让bookedTimeSlots={
预订:[
{
时间戳:{
发件人:1559719800,
致:1559723400
}
},
{
时间戳:{
发件人:1559730600,
致:1559732400
}
}
]
};代码>我是这样做的:
let availableTimeslots=[
1559709000,
1559710800,
1559712600,
1559714400,
1559716200,
1559718000,
1559719800,
1559721600,
1559723400,
1559725200,
1559727000,
1559728800,
1559730600,
1559732400,
1559734200,
1559736000,
1559737800,
1559739600
];
让parsedArr=[];
让bookedTimeSlots={
预订:[{
时间戳:{
发件人:1559719800,
致:1559723400
}
},
{
时间戳:{
发件人:1559730600,
致:1559732400
}
}
]
};
/*parsedArr=availableTimeslots.map((ts,i)=>{
return bookedTimeSlots.bookings.map((bs,n)=>{
设x=[];
如果(ts{
设ai=availableTimeslots.indexOf(bs.timestamp.from);
如果(ai>-1){
让range=[…uu.range(bs.timestamp.from,bs.timestamp.to,1800)]
可用中间地块[ai]={
可用:false,
时间戳:[…范围]
};
可用中间层拼接(ai+1,range.length-1);
}
})
log(“availableTimeSlot”,availableTimeSlot);
设tempArr=[];
让startIndex='';
让timeStampParsed=[…availableTimeslots];
而(!timeStampParsed.every((ts)=>typeof ts=='object')){
timestampassessed.map((ts,i)=>{
if(类型ts!=“对象”){
tempArr.push(ts);
startIndex==''&(startIndex=i);
//案例一达到最后一个索引
if(i==timeStampParsed.length-1){
让range=[…u.range(timeStampParsed[startIndex],timeStampParsed[i]+18001800)];
控制台日志(范围);
时间分析[startIndex]={
可用:正确,
时间戳:[…范围]
};
timestampassessed.splice(startIndex+1,range.length);
tempArr=[];
startIndex='';
}
}否则{
如果(tempArr.length>0&&startIndex!=''){
让range=[…u0.range(timeStampParsed[startIndex],timeStampParsed[i-1],1800)];
时间分析[startIndex]={
可用:正确,
时间戳:[…范围]
};
timestampassessed.splice(startIndex+1,range.length);
tempArr=[];
startIndex='';
}
}
})
}
log(“TIMESTAMP PARSED=>”,TIMESTAMP PARSED);
有很多方法可以解决这个问题。一种简化的方法是利用时隙之间存在已知增量(1800)的事实,因此,您可以为每个“块”生成一个新的时隙数组,而不是尝试分割时隙数组给定开始和结束时间段。在下面的代码段中,您可以看到采用此方法的基本递归解决方案:
常数增量=1800;
//用于生成包含范围的实用程序函数
功能范围包括(开始、结束、增量=增量){
返回开始<结束?[开始,…范围包括(开始+增加,结束)]:[结束];
}
功能时间段组(开始时间段、结束时间段、预订){
const[预订,…重新预订]=预订;
如果(预订){
if(startTimeslot console.log(组);
是预订[x]中的to
值。时间戳。to
独占还是包含?@spender