大概就是二分法去找,我这个是个简单例子
function findClosest(arr, target)
{
console.log(arr[0].subt_nat_amount.value)
let n = arr.length;
if (target <= arr[0].subt_nat_amount.value)
return arr[0].subt_nat_amount.value;
if (target >= arr[n - 1].subt_nat_amount.value)
return arr[n - 1];
let i = 0, j = n, mid = 0;
while (i < j)
{
mid = (i + j) / 2;
if (arr[mid].subt_nat_amount.value == target)
return arr[mid];
if (target < arr[mid].subt_nat_amount.value)
{
if (mid > 0 && target > arr[mid - 1].subt_nat_amount.value)
return getClosest(arr[mid - 1].subt_nat_amount.value,
arr[mid].subt_nat_amount.value, target);
j = mid;
} else
{
if (mid < n - 1 && target < arr[mid + 1])
return getClosest(arr[mid].subt_nat_amount.value,
arr[mid + 1].subt_nat_amount.value,
target);
i = mid + 1;
}
}
return arr[mid];
}
function getClosest(val1, val2, target)
{
if (target - val1 >= val2 - target)
return val2;
else
return val1;
}
简单直白的:
const arr = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
const goal = 100
const closest = arr.reduce((prev, curr) => {
return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});
console.log(closest)