JS 如何判斷一個數字在某一個區間內
現在有兩個陣列:revenue和reward
如果收入大於350 小於 450 那麼就獎勵30
如果收入大於450小於550,就獎勵50
要實現的效果跟Excel中的VlookUP函式比較像,怎麼寫最有效的判斷語句。
第一種普通方法:
var revenue = [350,450,550,650,850,1000,1100,1250,1500];
var reward = [0,30,40,50,100,200,240,300,400];
/*
根據指定的值,在revenue查詢第一個比它大的值,返回對應的索引,通過索引在reward獲取對應的獎勵
1:如果值小於revenue最小的值時,則獎勵0。所以reward前被了個0
2:如果值大於revenue最大的值時,則獎勵最高一檔
***注意***
前提是:revenue為整型陣列,且已經按照從小到大排好了序的
*/
function find(array,val){
//如果值小於revenue最小的值時,則獎勵0
if(val < Math.min.apply(null,array)){
return 0;
}
//如果值大於revenue最大的值時,則獎勵最高一檔
if(val > Math.max.apply(null,array)){
return array.length-1;
}
var idx = 0,i = 0,j = array.length;
for(i;i<j;i++){
if(array[i] > val){
idx = i;
break;
};
};
return idx;
};
alert('獎勵:'+reward[find(revenue,370)]);
第二種二分法:
var range = [350,450,550,650,850,1000,1100,1250,1500];
var reward = [30,40,50,100,200,240,300,400];
function binarySearch(arr,findVal,leftIndex,rightIndex){
if(leftIndex > rightIndex){
var find = leftIndex-1
return find;
}
var midIndex = Math.floor((leftIndex+rightIndex)/2);
var midVal = arr[midIndex];
if(midVal>findVal){
return binarySearch(arr,findVal,leftIndex,midIndex-1);
}else if(midVal<findVal){
return binarySearch(arr,findVal,midIndex+1,rightIndex);
}else {
var find = midIndex +1;
return find;
}
}
function ward(a){
if(a<0){
return 'no';
}
if(a>7){
a=7;
}
return reward[a];
}
var $a = binarySearch(range,800,0,9);
var $ward= ward($a);