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

Как найти самое большое число в массиве js

Как найти самое большое число в массиве js

5 лет назад

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

Ответы

3

Для того, чтобы найти максимальный элемент в массиве, можно воспользоваться не только агрегацией. Давайте обратимся к стандартным возможностям языка и рассмотрим метод Math.max.apply():

1
2
3
4
5
const numbers = [-94, 87, 12, 0, -67, 32];
const maxValue = Math.max.apply(null, numbers);
//обратите внимание, что в записи данного метода обязателен null. 
//Если забыть в записи данного выражения null, то в переменную maxValue вернётся -Infinity.
console.log(maxValue); // => 87

Есть ещё более хитрый способ использовать метод Math.max():
Для этого вспомним про spread оператор.

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

И невозможно не упомянуть про библиотеку Lodash с методом _.max():

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

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

4 года назад

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

1

Чтобы найти самое большое число в массиве, нужно выполнить агрегацию. Для этого можно использовать цикл или функцию высшего порядка:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const findMax = (numbers) => {
  // Если массив пустой, у него нет максимального элемента
  if (numbers.length === 0) {
    return null;
  }
  // Выполняем агрегацию
  return numbers.reduce(
    (acc, number) => (number > acc ? number : acc),
    // Сначала принимаем за максимальное первый элемент массива 
    numbers[0]
  );
};

findMax([1, 0, -5, 40, 10, -100, 41]); // 41

5 лет назад

Maksim Litvinov

1

Еще один способ. Можно использовать метод sort:

1
2
const arr = [1, 5, 0, 3, 5, 8, 9];
const max = arr.sort((a, b) => b - a)[0]; // 9

После сортировки методом sort() мы берем первый элемент результирующего массива, используя индекс [0], и присваиваем его переменной max.

4 года назад

Aleksey

0

искать максимальное сортировкой плохая затея.

3 года назад

Anatol81n

0

Самое большое число в массиве возвращает Math.max() вместе со spread-оператором:

1
2
const numbers = [3, 17, -4, 12];
console.log(Math.max(...numbers)); // => 17

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

Через reduce

Подходит для массивов любой длины:

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

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

Обычным циклом

1
2
3
4
5
6
let max = numbers[0];
for (const n of numbers) {
  if (n > max) {
    max = n;
  }
}

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

numbers.sort((a, b) => b - a)[0] тоже даёт максимум, но сортирует весь массив — это медленнее одного прохода — и меняет исходный массив.

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

Самый дорогой товар:

1
2
3
4
5
6
7
8
9
const products = [
  { name: 'Чай', price: 150 },
  { name: 'Кофе', price: 300 },
];

const expensive = products.reduce((a, b) => (b.price > a.price ? b : a));
console.log(expensive.name); // => Кофе

console.log(Math.max(...products.map((p) => p.price))); // => 300 — только цена

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

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

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

Math.max(...['10', '9']) сам преобразует строки в числа и вернёт 10. Но если попадётся нечисловая строка, результат будет NaN. Отфильтруйте данные заранее: arr.map(Number).filter(Number.isFinite).

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

7 дней назад

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

+7 800 100 22 47

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

+7 495 085 21 62

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

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