Script Preparation code:
x
 
function randomIntFromInterval(min, max) {
  // min and max included
  return Math.floor(Math.random() * (max - min + 1) + min);
}
var rows = [];
let lasth = 0;
for (let i = 0; i < 10000; i++) {
  lasth += randomIntFromInterval(16, 50);
  rows.push(lasth);
}
function sliceRange(arr, min, max) {
  var l = 0,
    r = arr.length;
  rough: {
    while (l < r) {
      var m = ~~(l + (r - l) / 2);
      if (arr[m] < min) l = m + 1;
      else if (arr[m] > max) r = m;
      else break rough;
    }
    return [];
  }
  var lr = m,
    rl = m;
  while (l < lr) {
    m = ~~(l + (lr - l) / 2);
    if (arr[m] < min) l = m + 1;
    else lr = m;
  }
  while (rl < r) {
    m = ~~(rl + (r - rl) / 2);
    if (arr[m] > max) r = m;
    else rl = m + 1;
  }
  return [l-1, r+1];
}
function getDatesBetweenRange(dates, min, max) {
  var subArray = [];
  var value, iCntr;
  var start, end;
  var low = 0,
    high = dates.length - 1;
  while (high - low > 1) {
    centre = Math.floor((high + low) / 2);
    if (dates[centre] < min) low = centre;
    else high = centre;
  }
  start = low;
  high = dates.length - 1;
  while (high - low > 1) {
    centre = Math.floor((high + low) / 2);
    if (dates[centre] > max) high = centre;
    else low = centre;
  }
  end = high;
  return [start-1,end+1];
}
Tests:
  • sliceRange

     
    sliceRange(rows, 70000, 70400)
  • getDatesBetweenRange

     
    getDatesBetweenRange(rows, 70000, 70400)
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    sliceRange
    getDatesBetweenRange

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Chrome 98 on Windows
View result in a separate tab
Test name Executions per second
sliceRange 3637731.0 Ops/sec
getDatesBetweenRange 54763.0 Ops/sec