//二分法搜索范围,返回 [start,end] 或者 index
function findScope(str,hasSortArr,callback) {
var lm,rm;
var l=0,r=hasSortArr.length;
var has=false;
while(l<r){
const m=(l+r)>>1;
//比较下坐标大小
const dis=callback(str,hasSortArr[m])
if(dis>0){
l=Math.max(m,l+1)
}else if(dis<0){
r=Math.min(m,r-1)
}else{
lm=l;
rm=r;
l=r=m
has=true;
}
}
if(has){
while (lm<l){
const m=(l+lm)>>1;
//比较下坐标大小
const dis=callback(str,hasSortArr[m])
if(dis>0){
lm=Math.max(m,lm+1)
}else{
l = Math.min(m, l - 1)
}
}
while (rm>r){
const m=(r+rm)>>1;
//比较下坐标大小
const dis=callback(str,hasSortArr[m])
if(dis<0){
rm=Math.min(m,rm-1)
}else {
r = Math.max(m, r + 1)
}
}
return [l,r];
}
return l
}
const index=findScope(10,[1,3,4,4,4,5],function (p1,p2) {
return p1-p2
})
console.log(index)