JS, получите ближайший предыдущий номер из массива - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно извлечь самое близкое число из массива, однако это число должно всегда использовать нижнее число из массива, даже если оно не самое близкое, мне нужно сделать это на обычном JS, например: -

Input = 499
Array = [100, 250, 500, 1000, 5000]
Answer = 250

Input = 900
Array = [100, 250, 500, 1000, 5000]
Answer = 500

РЕДАКТИРОВАТЬ: решение Нинас работал для штрафования числа, однако при использовании в моем коде я получаю ошибку: -

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 ]

2 голосов
/ 17 октября 2019

Вы можете найти его, посмотрев на следующее значение массива.

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
0 голосов
/ 17 октября 2019

Вы можете отсортировать массив в порядке убывания (для этого случая вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...