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

rinima6114 2014-01-28 09:40:58
现在有两个数组
var revenue = new Array([350],[450],[550],[650],[850],[1000],[1100],[1250],[1500]);
var reward = new Array([30],[40],[50],[100],[200],[240],[300],[400]);

如果收入大于350 小于 450 那么就奖励30
如果收入大于450小于550,就奖励50

要实现的效果跟Excel中的VlookUP函数比较像,想问下各位朋友,JS中如何有没有类似的函数,或者怎么写最有效的判断语句。
...全文
4472 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rinima6114 2014-01-28
  • 打赏
  • 举报
回复
嗯嗯 再次谢谢二楼的u011461314 不好意思 拜谢了!
zhjdg 2014-01-28
  • 打赏
  • 举报
回复
顺序都排好的,绝对是2分。
zhjdg 2014-01-28
  • 打赏
  • 举报
回复
妈妈的
   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);
泡泡鱼_ 2014-01-28
  • 打赏
  • 举报
回复
是的,原理说来说,二分法确实效率要高,但相对来讲在操作大数组,或重复操作时效率高.像你这种长度和需求的,着实没必要,那效率几乎是木有差别
rinima6114 2014-01-28
  • 打赏
  • 举报
回复
谢谢楼上,是我要的效果,还有二楼说的二分法对我很有启发,相比来说二分法的效率要高一点 再次感谢两位的思路!
泡泡鱼_ 2014-01-28
  • 打赏
  • 举报
回复
按照你提供的两个数组[你原数组定义有问题],猜测,你是不是想要如下的效果:
    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<j;i++){
            if(array[i] > val){
                idx = i;
                break;
            };
        };
        return idx;
    };
    alert('奖励:'+reward[find(revenue,370)]);
rinima6114 2014-01-28
  • 打赏
  • 举报
回复
引用 1 楼 u011461314 的回复:
二分法查找。。。。
能否对例子做一点详细的解释呢?
zhjdg 2014-01-28
  • 打赏
  • 举报
回复
二分法查找。。。。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧