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;
| };
|
|