簡體   English   中英

獲得最接近的價值

[英]Getting the closest value

我已經遇到過幾次這個問題,但是我沒有很好的解決方案。

假設我有一個不固定間隔的簡單數字數組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);

您的先生正在尋找二進制搜索而不是!

我想告訴您,您不需要特別檢查該值是大於還是小於先前的數組值。 相反,只需計算出目標值和“當前”數組元素之間的絕對差即可。 並將其與迄今為止的最佳差異進行比較,以確定此數組索引是否是迄今為止的獲勝者...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM