2012-10-23 162 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當然 - 這可能是解決問題的最佳方法。我只想指出,爲了學習的緣故,你目前的方法如何改進。 –