Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据预定的时隙将可用时隙数组拆分为块_Javascript_Arrays_Lodash_Chunks - Fatal编程技术网

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个)
  • 我从API响应中获得预定的插槽响应
  • 我需要合并两个数组以形成表示可用和预订插槽的对象数组:

    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(startTimeslotconsole.log(组);
    预订[x]中的
    to
    值。时间戳。to
    独占还是包含?@spender