• 前端对多对时间段进行处理 取并集合并没有交集的项


    // timePairList = [{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 18:50:00'},{startTime:'2022-07-20 07:00:00','endTime':'2022-07-20 19:50:00'},{startTime:'2022-07-20 06:00:00','endTime':'2022-07-20 07:10:00'}]// 三个互相交叉

    // timePairList = [{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 18:50:00'},{startTime:'2022-07-20 07:00:00','endTime':'2022-07-20 19:50:00'},{startTime:'2022-07-20 20:00:00','endTime':'2022-07-20 20:30:00'}]// 两个互相交叉 第三项不交叉

    // timePairList = [{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 18:50:00'},{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 19:00:00'},{startTime:'2022-07-20 19:00:00','endTime':'2022-07-20 20:10:00'}]

    // timePairList = [{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 18:50:00'},{startTime:'2022-07-20 07:00:00','endTime':'2022-07-20 19:50:00'}]

    // timePairList = [{startTime:'2022-07-20 05:00:00','endTime':'2022-07-20 18:50:00'},{startTime:'2022-07-20 04:00:00','endTime':'2022-07-20 19:50:00'},{startTime:'2022-07-20 03:00:00','endTime':'2022-07-20 07:10:00'}]

    export const compare = (first, second) => {

    const left = [new Date(first.startTime), new Date(first.endTime)];

    const right = [new Date(second.startTime), new Date(second.endTime)];

    if (left[1] < right[0]) {

    // 没有交集

    return [first, second];

    }

    if (left[1] >= right[0]) {

    // 有交集

    if (left[1] < right[1]) {

    return [

    {

    startTime: first.startTime,

    endTime: second.endTime,

    },

    ];

    } else {

    return [

    {

    startTime: first.startTime,

    endTime: first.endTime,

    },

    ];

    }

    }

    };

    export const compose = (arr) => {

    arr = arr.sort((a,b)=>{

    let startA = moment(a.startTime).valueOf()

    let startB = moment(b.startTime).valueOf()

    return startA-startB

    })

    let res = [];

    let temp = [arr[0]];

    let len = arr.length;

    let i = 0;

    if (len < 2) {

    return arr;

    }

    while (i < len - 1) {

    temp = compare(temp[temp.length - 1], arr[i + 1]);

    if (temp.length === 2) {

    // 无交集

    res.push(temp[0]);

    }

    i += 1;

    }

    res.push(temp[temp.length - 1]);

    return res;

    };


     


     

    const arr = [
      { startTime: "2022-07-20 05:00:00", endTime: "2022-07-20 05:50:00" },
      { startTime: "2022-07-20 06:00:00", endTime: "2022-07-20 06:10:00" },
      { startTime: "2022-07-20 07:00:00", endTime: "2022-07-20 07:50:00" },
      { startTime: "2022-07-20 08:10:00", endTime: "2022-07-20 19:50:00" },
    ];

    console.log(compose(arr));

    第二种方法:

    const mergeTime = (arr: object[]) => { if (arr.length <= 0) { return; } else if (arr.length <= 1) { result = result.concat(arr); return; } const temp: object[] = []; for (let index = 0; index < arr.length - 1; index++) { const element1 = arr[index]; const element2 = arr[index + 1]; const startTimeDiff = moment(element1.endTime).diff( moment(element2.startTime), ); if (startTimeDiff >= 0) { const endTimeDiff = moment(element1.endTime).diff( moment(element2.endTime), ); if (endTimeDiff > 0) { temp.push({ startTime: element1.startTime, endTime: element1.endTime, }); } else { temp.push({ startTime: element1.startTime, endTime: element2.endTime, }); }

    if (arr.length > 2) { const nextSource = temp.concat(arr.slice(2)); mergeTime(nextSource); } else { result = result.concat(temp); } break; } else { result.push(element1); if (arr.length > 1) { mergeTime(arr.slice(1)); } break; } } console.log(result, 'result'); };

  • 相关阅读:
    33_ue4进阶末日生存游戏开发[拾取面板UI]
    Linux学习笔记——文件的查找与检索
    防止血糖飙升,你需要知道这12个技巧
    企业如何做源代码保护措施
    无人值守配电室变电所运维解决方案
    C++——命名空间
    SpringSecurity源码学习四:会话管理
    JAVA计算机毕业设计自由教学平台Mybatis+源码+数据库+lw文档+系统+调试部署
    京东资深架构师推荐学习6本实战文档:Redis+Nginx+MySQL+JVM....
    自学ansible笔记
  • 原文地址:https://blog.csdn.net/gwdgwd123/article/details/126041705