1. 程式人生 > >JS 如何判斷一個數字在某一個區間內

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