JS 如何判断一个数字在某一个区间内

本文介绍了一种使用JavaScript来实现基于不同收入区间分配奖励的方法。通过两种方式实现:一种是遍历数组查找,另一种是采用更高效的二分查找算法。文章提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在有两个数组: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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值