heyujie
2021-06-07 8f8155aa4c83f7c2577ac123add550766b6a7ce3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"use strict";
 
var toPosInt = require("../../number/to-pos-integer")
  , callable = require("../../object/valid-callable")
  , value    = require("../../object/valid-value")
  , floor    = Math.floor;
 
module.exports = function (compareFn) {
    var length, low, high, middle;
 
    value(this);
    callable(compareFn);
 
    length = toPosInt(this.length);
    low = 0;
    high = length - 1;
 
    while (low <= high) {
        middle = floor((low + high) / 2);
        if (compareFn(this[middle]) < 0) high = middle - 1;
        else low = middle + 1;
    }
 
    if (high < 0) return 0;
    if (high >= length) return length - 1;
    return high;
};