我有2個日期範圍數組我試圖找出區別。 讓我們用數字,例如:如何區分日期範圍的2個數組之間的區別?
我有2米範圍[1-7, 9-16]
,我想減去[2-3, 7-9, 14-20]
並獲得[1-1, 4-6, 10-13]
結果的範圍,我陷入一個有點車轍試圖弄清楚的。當然有一個我不知道的通用解決方案?
diffDateRangesArray(rangesArray1, rangesArray2) {
//rangesArray = [{startDate, endDate}]
let diffedRanges = [];
rangesArray1.forEach(function(range1){
//loop through rangesArray2 removing from range1
rangesArray2.forEach(function(range2){
// breaks if array returned
// perhaps should always return array and flatten?
range1 = diffDateRanges(range1, range2);
});
diffedRanges.push(range1);
});
//probably should do some sort of union here
return diffedRanges;
}
diffDateRanges(range1, range2) {
//range = {startDate, endDate}
let diffedRange = {};
// if not in range
if(range2.endDate <= range1.startDate || range2.startDate >= range1.endDate){
return range1;
//if envelops range
} else if(range2.endDate >= range1.endDate && range2.startDate <= range1.startDate){
return null;
//if cuts off end of range
} else if(range2.startDate <= range1.endDate && range2.endDate >= range1.endDate){
return {startDate:range1.startDate, endDate: range2.startDate};
// if cuts off start of range
} else if(range2.endDate >= range1.startDate && range2.startDate <= range1.startDate){
return {startDate:range2.endDate, endDate: range1.endDate};
// if inside of range - should better handle arrays
} else if(range2.startDate >= range1.startDate && range2.endDate <= range1.endDate){
return [
{startDate:range1.startDate, endDate: range2.startDate},
{startDate:range2.endDate, endDate: range1.endDate},
];
}
}
我沒有得到如何減去'[2-3,7-9,14-20]''從[1-7 ,9-16]'會導致'[1-1,4-6,10-13]'......你能否更詳細地解釋這一部分,什麼是從什麼等中減去的? –
怎麼樣:我有數字'[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16]',我想刪除'[2 ,3,7,8,9,14,15,16,17,18,19,20]',導致'[1,4,5,6,10,11,12,13]' - 但是輸入並且輸出需要是帶有「{start,end}」的對象而不是一系列。這可能給了我一個想法... –
我想我只需要將'{start,end}'對象轉換成一個數組,並區分它們!然後將它翻譯回一個'{start,end}'陣列 –