Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript - Check numeric range overlapping in array

I have an array of time ranges with start & end values.

var timeRanges = [{
    start: 120,
    end: 140
},{
    start: 180,
    end: 220
},{
    start: 250,
    end: 300
}]

Need to check whether the selected range overlap the time range or not. And also the selected range should be in between the timeRange intervals. (Ex: 140-180, 220-250)

var selected = {
    start: 150,
    end: 170
}
like image 389
Hulk1991 Avatar asked Mar 08 '26 20:03

Hulk1991


2 Answers

Time interval B 'overlaps' A if:

  • B starts after A starts but before A finishes.
  • B starts before A starts and finishes after A starts.

So you can write a function which decides exactly that.

function areOverlapping(A, B) {
    if(B.start < A.start) {
        return B.finish > A.start;
    }
    else {
        return B.start < A.finish;
    }
}
like image 186
L.Grozinger Avatar answered Mar 11 '26 11:03

L.Grozinger


 const overlaps = timeRanges.some( range => 
  (range.start < selected.start && range.end > selected.start) || 
  (range.start < selected.end && range.end > selected.end) || 
  (range.start > selected.start && range.end < selected.end)
 );
like image 35
Jonas Wilms Avatar answered Mar 11 '26 11:03

Jonas Wilms



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!