获得最接近的价值

时间:2012-10-23 11:39:22

标签: javascript

我现在已经遇到过这个问题几次,而且我没有一个很好的解决方案。

假设我有一个非固定间隔的简单数字数组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);

2 个答案:

答案 0 :(得分:3)

你先生正在寻找一个binary search而不是那个!

答案 1 :(得分:1)

我会给你一个推特,你不需要特别检查该值是否大于或小于前一个数组值。相反,只需计算出目标值与“当前”数组元素之间的绝对差值。并将其与迄今为止的最佳差异进行比较,以确定此阵列索引到目前为止是否是获胜候选人......