Как в массиве чисел найти ближайшее к заданному?

Допустим, есть 15 разных чисел.
И надо найти самое ближнее к какому-нибудь числу.

К примеру, 110, 200, 390, 488, 509. А само какое-то число равняется 220.
Как найти "200" без использования if? Не делать же 15 разных if-ов, верно?
  • Вопрос задан
  • 334 просмотра
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
const findClosest = (arr, num) =>
  arr.reduce((closest, n) =>
    Math.abs(n - num) > Math.abs(closest - num)
      ? closest
      : n
  , undefined);


const arr = [ 110, 200, 390, 488, 509 ];
const num = 220;

const closest = findClosest(arr, num);
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Можно в цикле перебрать, императивно.

var nums = [110, 200, 390, 488, 509];
var base = 220;

var found_index = 0, dist = Math.abs(nums[0] - base);
nums.forEach((e,i)=>{
  let new_dist = Math.abs(e - base);
  if (new_dist < dist) {
    dist = new_dist;
    found_index = i;
  }
});

console.log('Ответ:', nums[found_index]);
Ответ написан
Комментировать
hahenty
@hahenty
('•')
без if-ов, однострочно.
( ( ar, br, mn ) => { br = ar.map( a => Math.abs( br - a ) ); mn = Math.min( ...br ); return ar[ br.indexOf( mn ) ] } ) ([ 110, 200, 390, 488, 509 ], 220)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
в массив, отсортировать, найти
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы