在JavaScript数组中搜索时获得更高的值



我有一段代码,可以在给定值的数组中找到最接近的数字。

在下面的示例中,输出将是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));

最新更新