我有一段代码,可以在给定值的数组中找到最接近的数字。
在下面的示例中,输出将是5
,因为它是最接近的可用数字。但是,我希望输出为15
,因为客户想要7
,所以他必须购买15
选项。
当客户输入60
时,它应该恢复到55
,因为这是最后一个选项。
我该怎么解决这个问题?
var array = ["5", "15", "30", "55"];
var input = 7;
let output = closest(array, input);
console.log(output);
function closest(arr, closestTo) {
var result,
lastDelta;
arr.some(function(item) {
var delta = Math.abs(closestTo - item);
if (delta > lastDelta) {
return true;
}
result = item;
lastDelta = delta;
});
return result;
}
这将负责搜索下一个最大的数字并恢复到可用的最大值。这是CertainPerformance响应的修改版本。
const
array = [ "5", "15", "30", "55" ],
closest = (arr, n) => arr.find(x => x >= n) || arr[arr.length - 1];
console.log(closest(array, 3)); // 5
console.log(closest(array, 7)); // 15
console.log(closest(array, 60)); // 55
改为使用.find
-只需找到第一个值大于或等于closest
参数的项:
var array = ["5", "15", "30", "55"];
const closest = (arr, numToFind) => arr.find(x => x >= numToFind) || arr[arr.length - 1];
console.log(closest(array, 7));
如果数组可能没有首先排序,那么可以提前对其进行排序,或者(不那么复杂(更严格地迭代,检查值:
var array = ["5", "15", "30", "55"];
const closest = (arr, numToFind) => {
const largest = Math.max(...arr);
let bestSoFar = Infinity;
for (const num of arr) {
if (num >= numToFind && num < bestSoFar) {
bestSoFar = num;
}
}
return bestSoFar ?? largest;
};
console.log(closest(array, 7));