27 lines
800 B
JavaScript
27 lines
800 B
JavaScript
|
/**
|
||
|
* @license
|
||
|
* Based off baseSortedIndex function in Lodash <https://lodash.com/>
|
||
|
* Copyright JS Foundation and other contributors <https://js.foundation/>
|
||
|
* Released under MIT license <https://lodash.com/license>
|
||
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
||
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
||
|
*/
|
||
|
export default function sortedIndex(array, value, comparator) {
|
||
|
let low = 0;
|
||
|
let high = array.length;
|
||
|
|
||
|
while (low < high) {
|
||
|
let mid = (low + high) >>> 1;
|
||
|
let cmpResult = comparator(value, array[mid]);
|
||
|
|
||
|
if (cmpResult > 0) {
|
||
|
low = mid + 1;
|
||
|
} else if (cmpResult < 0) {
|
||
|
high = mid;
|
||
|
} else {
|
||
|
low = high = mid;
|
||
|
}
|
||
|
}
|
||
|
return high;
|
||
|
}
|