Javascript在数组中找到最接近的数字而不遍历

M. *_*Set 1 javascript arrays

我怎样才能修改这个非常好的函数来找到最接近的数字但永远不会高于输入?

function closest(arr, closestTo){

var closest = Math.max.apply(null, arr);

for(var i = 0; i < arr.length; i++){
    if(arr[i] >= closestTo && arr[i] < closest) closest = arr[i];
}

return closest;
}

console.log(closest(myArray, 1234));
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

juv*_*ian 5

您可以删除检查更大的部分。另一种方法是:删除较高的值,并从剩余的值中获取最大值:

function closest(arr,val){
    return Math.max.apply(null, arr.filter(function(v){return v <= val}))
}

console.log(closest([1,22,121223],24)) // prints 22
Run Code Online (Sandbox Code Playgroud)

  • @m-el-set 但您需要确保给定的输入不小于数组中的所有元素。因此,如果 arr = [30,40,50] 如果调用closest(arr, 10),则会出现异常 (2认同)
  • @HoumamWazzeh 实际上,它将返回 -Infinity。是的,应该添加未找到任何元素的行为 (2认同)