繁体   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