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


    // 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'); };

  • 相关阅读:
    Composition Api 与 Options Api 有什么区别?
    西门子S7-200SMART常见通讯问题解答
    Docker搭建jenkins环境
    纳米体育数据足球数据接口:资料库数据包接口文档API示例②
    【Pytorch基础教程35】引入非线性的激活函数
    SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件
    碳中和大潮惊涛拍岸,科技企业如何迈入这条大江大河?
    跨境电商必读:如何选择适合跨境ERP系统?
    Nmap使用教程图文教程(超详细)
    rust引用
  • 原文地址:https://blog.csdn.net/gwdgwd123/article/details/126041705