Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/88: Рейтинг темы: голосов - 88, средняя оценка - 4.69
 Аватар для zura87
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 38

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

08.04.2019, 08:50. Показов 17708. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть массив
JavaScript
1
 var a = [-6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932]
и есть число
JavaScript
1
 var b = -620
Как выбрать максимально приближенное число в массиве?

если b = -620 из массива должно выбрать -648, если b = -180, тогда -220 и т. д.

Заранее спасибо!
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2019, 08:50
Ответы с готовыми решениями:

как найти наибольшее число в массиве чисел?
с помощью math.max я так понял нельзя?

Массив: Найти наиболее часто встречающийся элемент в массиве...
Помогите, пожалуйста 1. Создать массив чисел от 1 до 10000 2. Найти сумму чисел массива, которые стоят на четных местах 3. Найти...

Найти наиболее близкое число
Вот такое задание: Есть файлик с числами, пользователь вводит b и x, высчитывается функция, потом из файлика должно выбрать наиболее...

9
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
08.04.2019, 10:35
Ну у меня как то так получилось, по вашему примеру вроде работает

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
const arr = [-6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932];
const searchNumber = -620;
 
const getNumber = (arr, number) =>
  arr.map(it => {
      const ch = (it >= 0 ? it : -it) + number;
      return {
        base: it,
        result: ch >= 0 ? ch : -ch
      };
    }).sort((a, b) => a.result - b.result)[0].base
 
console.log(getNumber(arr, searchNumber));
1
 Аватар для zura87
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 38
08.04.2019, 11:29  [ТС]
Огромное спасибо!
То что и было нужно !!!!!!
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
08.04.2019, 14:37
zura87, можно так еще
JavaScript
1
2
3
4
5
6
let search = -620;
let arr = [-6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932];
 
console.log(
    arr.filter(cur => cur < search)[0]  // -648
);
или так но с положительными и отрицательными числами
JavaScript
1
2
3
4
5
let search = 500;
let arr = [6, 220, 434, 648, 862, -1076, -1290, -1504, -1718, -1932];
let res = search < 0 ? arr.filter(cur => cur < search)[0] : arr.filter(cur => cur > search)[0];
 
console.log(res);
3
 Аватар для zura87
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 38
08.04.2019, 14:38  [ТС]
Спасибо, буду пробовать
0
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
08.04.2019, 15:55
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
или так но с положительными и отрицательными числами
Интересный вариант, но результат какой то неожиданный немного.
JavaScript
1
search = -42;
JavaScript
1
console.log(res); // -1076
Хотя вроде бы должно быть 6, всё таки оно в более близком диапазоне...

JavaScript
1
search = 221;
JavaScript
1
console.log(res); // 434
Хотя 220 ближе
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
08.04.2019, 16:17
zura87, arcmag, Mr_Sergo, а я чо-то не стал изобретать новые алгоритмы
и тупо применил один из методов LINQ.
Естественно, если скопировать библиотечную функцию, то код получается длинным.
Но логика то простая и понятная.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        /**
         * Минимальный элемент массива или массивоподобного объекта. Адаптация из LINQ
         * @param {Array} array Входящий массив.
         * @param {Function} selector Функция, возвращающая из объекта свойство, по которому надо искать минимальный элемент
         */
        function min(array, /*Func<TSource, TResult>*/ selector) {
            let res, v, v2, count = array.length;
            if (selector)
                for (let i = 0; i < count; ++i) {
                    v = array[i];
                    v2 = selector(v);
                    if (!isNaN(v2)) {
                        if (res === undefined || v2 < res)
                            res = v2;
                    }
                }
            else
                for (let i = 0; i < count; ++i) {
                    v = array[i];
                    if (!isNaN(v)) {
                        if (res === undefined || v < res)
                            res = v;
                    }
                }
            if (!isNaN(res))
                return res;
            throw new Error("No elements");
        }
 
        let a = [-6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932],
            b = -42; //-620;
        let diff = min(a, e => Math.abs(e - b));
 
        console.log(a.find(e => Math.abs(e - b) === diff));
2
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
08.04.2019, 17:16
Лучший ответ Сообщение было отмечено zura87 как решение

Решение

amr-now,
Взял на себя смелость чуток сократить... пример хороший кстати, работает получше моего первого
JavaScript
1
2
3
4
5
6
const getNumber = (arr, searchNumer) => 
  arr.find(it => Math.abs(it - searchNum) === Math.min(...arr.map(it => Math.abs(it - searchNum))));
 
const arr = [123, 23, -6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932];
const searchNum = 9;
console.log(getNumber(arr, searchNum));
3
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
08.04.2019, 17:30
Ну и до кучи )))
JavaScript
1
2
let a = [-6, -220, -434, -648, -862, -1076, -1290, -1504, -1718, -1932], b = -620;
console.log(a.sort((x, y) => Math.abs(b - x) - Math.abs(b - y) )[0]);
4
 Аватар для zura87
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 38
09.04.2019, 10:28  [ТС]
Всем спасибо, очень помогли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2019, 10:28
Помогаю со студенческими работами здесь

Найти беззнаковое число наиболее близкое к заданному
Напишите пожалуйста программу на Ассемблере. Вот задание: Найти беззнаковое число наиболее близкое к заданному.

Найти число, наиболее близкое какому-нибудь целому числу
используя цикол написать программу обеспечивающую ввод N вещественных чисел и выводящую на экран то из них которое наиболее близкое...

Найти число наиболее близкое к заданному для массива 8-разрядных чисел со знаком
Помогите, найти ошибку) format PE console ; 32-разрядная консольная программа WINDOWS EXE entry start ...

Как найти наиболее близкое значение времени
Такая задача: В текстовом log-файле прописано несколько строк со временем вида - 12/07/2012 20:22:44. Даты все одинаковые, а время...

В вещественном массиве найти число максимально близкое к заданному целому
Дано 12 вещественных чисел. Найти порядковый номер того из них, которое наиболее близко к какому-нибудь заданному целому числу Х. Через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru