找到最接近的较小值的数组

fra*_*ool 5 javascript arrays jquery

我想我想要的很简单,但我找不到正确的解决方案.

我在Javascript中有这种数组:

[0, 38, 136, 202, 261, 399]
Run Code Online (Sandbox Code Playgroud)

按下按钮,我得到0到600的生成值.我需要的是找到这个数组中最接近的较低值.

例如,如果生成的值是198,我想得到136作为结果.如果生成的值是300,我想要261 ...如果它是589,我想要399等等.

到目前为止,我已尝试使用此代码:

var theArray = [ 1, 3, 8, 10, 13 ];
var goal = 7;
var closest = null;

$.each(theArray, function(){
    if (closest == null || Math.abs(this - goal) < Math.abs(closest - goal)) {
        closest = this;
    }
});

alert(closest);
Run Code Online (Sandbox Code Playgroud)

但它只返回最接近的值...现在我需要得到给定数字的最接近的较小值...我如何改进我的算法以满足我的需要?

谢谢!

chr*_*con 10

反转数组并使用 find

let arr = [0, 38, 136, 202, 261, 399];
let val = 300;
let number = arr.reverse().find(e => e <= val);
console.log(number);
Run Code Online (Sandbox Code Playgroud)


Dav*_*lez 7

如果您的数组已排序,并且足够小,那么一个非常简单的模式可以执行您想要的操作,只需遍历数组,直到number > number-in-array返回前一个位置的数字。

function getClosestValue(myArray, myValue){
    //optional
    var i = 0;

    while(myArray[++i] < myValue);

    return myArray[--i];
}
Run Code Online (Sandbox Code Playgroud)

问候。