0
点赞
收藏
分享

微信扫一扫

Javascript 查找数组中最相近的数


大概就是二分法去找,我这个是个简单例子

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)

举报

相关推荐

0 条评论