2012-10-23 246 views
0

我几次遇到这个问题,我没有一个很好的解决方案。获取最接近的值

假设我有一个非固定间隔的简单数字排列,myArray。我想有一个函数可以取整数(可以是负数),并返回它最接近的数组中的值。在我的例子中,我希望它返回850

我想我需要使用upperlower变量制定出该数组值是最接近我传递值。

我在正确的轨道上,还是有一个更有效的方法实现这一点,谁能给我一个正确的方向推动?

这是我到目前为止有:

var myArray = [0,850,1800,2500,3300]; 

function snapTo(value){ 
    var upper = -1; 
    var lower = -1; 

    // if the value is bigger than the last array value 
    if(value > myArray[myArray.length-1]){ 
     upper = myArray[myArray.length-1]; 
     lower = myArray[myArray.length-2]; 
    // if the value is smaller than the first array value 
    } else if(value < myArray[0]){ 
     upper = myArray[1]; 
     lower = myArray[0]; 
    } else { 
     for(var i = 0, i < myArray.length, i++){ 
      if(value > myArray[i]){ 
       upper = myArray[i]; 
       lower = myArray[i-1]; 
       break; 
      } 
     } 
    } 

    // x being the index of the closest array value to the one passed in 
    return myArray[x]; 
} 

snapTo(1200); 
+1

http://stackoverflow.com/questions/3561275/using-jquery-how-would-i-find - 最接近匹配的数组到指定的数字 – jwaliszko

回答

1

我会给你微调,你并不特别需要检查值是大于还是小于先前的数组值。相反,只需计算目标值和“当前”数组元素之间的绝对差异即可。并将其与目前为止最好的区别进行比较,以决定此数组索引是否是迄今为止获胜的候选人...

+0

感谢这一点,但我决定沿着二分搜索路线走 - 没有人重新发明车轮。 – boz

+0

@boz当然 - 这可能是解决问题的最佳方法。我只想指出,为了学习的缘故,你目前的方法如何改进。 –