我需要从数组中检索最接近的数字,但是,即使不是最接近的数字,此数字也必须始终使用数组中的更低的数字,我需要在普通JS中执行此操作,例如:-
Input = 499
Array = [100, 250, 500, 1000, 5000]
Answer = 250
Input = 900
Array = [100, 250, 500, 1000, 5000]
Answer = 500
编辑:Ninas解决方案用于细化数字,但是在我的代码中使用时,出现错误:-
Uncaught TypeError: Cannot destructure 'undefined' or 'null'.
用法:-
var qtyBreaks = $("#SingleOptionSelector-0>option").map(function() {
if ($(this).val() != "sample"){
return parseInt($(this).val());
}
});
$('#Quantity-product-template').on('input', function() {
console.log(getSmaller($(this).val(), qtyBreaks));
// qtyBreaks = [100, 250, 500, 1000, 5000]
// $(this).val = 102 (always number)
});
function getSmaller(value, array) {
return array.find((v, i, { [i + 1]: next }) => v === value || next > value);
}
答案 0 :(得分:2)
您可以通过查找数组的下一个值来找到它。
function getSmaller(value, array) {
return array.find((v, i, { [i + 1]: next }) => v === value || next > value);
}
console.log(getSmaller(400, [100, 250, 500, 1000, 5000])); // 250
console.log(getSmaller(500, [100, 250, 500, 1000, 5000])); // 500
console.log(getSmaller(5000, [100, 250, 500, 1000, 5000])); // 5000
对于所有较小的值,您可以更改条件。
function getSmaller(value, array) {
return array.find((_, i, { [i + 1]: next }) => next >= value);
}
console.log(getSmaller(400, [100, 250, 500, 1000, 5000])); // 250
console.log(getSmaller(500, [100, 250, 500, 1000, 5000])); // 250
console.log(getSmaller(5000, [100, 250, 500, 1000, 5000])); // 1000
答案 1 :(得分:0)
您可以按降序对数组进行排序(在这种情况下,您可以使用Array.reverse()
)并找到小于或等于输入值的第一个元素(Array.find()
)。
希望这会有所帮助
var input1 = 499
var array1 = [100, 250, 500, 1000, 5000]
var input2 = 900
var array2 = [100, 250, 500, 1000, 5000]
var output1 = array1.reverse().find(item => item <= input1);
console.log('Output 1: ', output1);
var output2 = array2.reverse().find(item => item <= input2);
console.log('Output 2: ', output2);