JS,从数组中获取最近的数字

时间:2019-10-17 08:08:24

标签: javascript arrays math shopify

我需要从数组中检索最接近的数字,但是,即使不是最接近的数字,此数字也必须始终使用数组中的更低的数字,我需要在普通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);
}

2 个答案:

答案 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);