/
Вопросы и ответы
/
JavaScript
/

Как найти минимальный элемент массива js

Как найти минимальный элемент массива js

5 лет назад

Человек-Молекула

Ответы

10

Найти минимальное значение в массиве можно простым перебором и сравнением:

1
2
3
4
5
6
7
8
9
10
11
const numbers = [3, 4, 9, 3, 5, 1, 7]; // исходный массив

// создадим переменную в которую будем сохранять текущее минимальное значение
// установим в нее значение из первого элемента массива
let minimum = numbers[0];
for (const item of numbers) {
  if(item < minimum) {
    minimum = item; // если находим другое минимальное число, то сохраняем в переменную
  }
}
console.log(minimum); // => 1

Также можно воспользоваться встроенным методом Math.min() в сочетании со spread оператором:

1
2
3
4
const numbers = [3, 4, 9, 3, 5, 1, 7]; // исходный массив

const minimum = Math.min(...numbers);
console.log(minimum); // => 1

5 лет назад

Ivan Gagarinov

7

Для нахождения минимального элемента в массиве предлагаю написать собственную функцию с использованием функции высшего порядка reduce и стандартного метода Math.min():

1
2
3
const numbers = [-94, 87, 12, 0, -67, 32];
const min = (values) => values.reduce((x, y) => Math.min(x, y));
console.log(min(numbers)); // => -94

По факту в этой функции мы делаем обычную агрегацию. Берём попарно элементы массива и при каждой итерации находим из них минимальный.

Следующий вариант — использование стандартного метода Math.min():

1
2
3
const numbers = [-94, 87, 12, 0, -67, 32];
const minValue = Math.min.apply(null, numbers);
console.log(minValue); // => -94

В примере выше не забудьте про null, иначе в переменную minValue вернётся Infinity.

Также стоит вспомнить про библиотеку Lodash:

1
2
const numbers = [-94, 87, 12, 0, -67, 32];
console.log(_.min(numbers)); // => -94

Документация:

4 года назад

Виктория Аблаева

0

Минимальное число в массиве возвращает Math.min() со spread-оператором:

1
2
const numbers = [3, 4, 9, -2, 5];
console.log(Math.min(...numbers)); // => -2

Для пустого массива Math.min() вернёт Infinity. Проверяйте длину заранее.

Через reduce

1
2
const min = numbers.reduce((acc, n) => (n < acc ? n : acc), numbers[0]);
console.log(min); // => -2

Spread передаёт элементы аргументами функции, а у движков есть лимит на число аргументов. На массиве из сотен тысяч элементов Math.min(...arr) упадёт с RangeError, reduce и цикл работают с любым размером.

Индекс минимального элемента

1
2
const index = numbers.indexOf(Math.min(...numbers));
console.log(index); // => 3

Минимум среди объектов

Самый дешёвый товар:

1
2
3
4
5
6
7
const products = [
  { name: 'Чай', price: 150 },
  { name: 'Сахар', price: 90 },
];

const cheapest = products.reduce((a, b) => (b.price < a.price ? b : a));
console.log(cheapest.name); // => Сахар

Минимум и максимум за один проход

1
2
3
4
5
const { min, max } = numbers.reduce(
  (acc, n) => ({ min: Math.min(acc.min, n), max: Math.max(acc.max, n) }),
  { min: Infinity, max: -Infinity },
);
console.log(min, max); // => -2 9

Если в массиве строки или пропуски

Math.min(...['10', '2']) переведёт строки в числа и вернёт 2. Но Math.min(5, undefined) даст NaN, а Math.min(5, null) — 0: null превращается в ноль. Очистите данные заранее:

1
const clean = data.map(Number).filter(Number.isFinite);

Почему не сортировкой

[...numbers].sort((a, b) => a - b)[0] тоже даёт минимум, но сортировка медленнее одного прохода. sort() без функции сравнения сравнивает числа как строки: [10, 9, 1].sort() вернёт [1, 10, 9].

Методы массивов разбирают в бесплатном курсе «Основы JavaScript».

7 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845