Как найти максимум и минимум в массиве
Короткий ответ
Math.max() принимает отдельные числа, поэтому массив раскрывают оператором ...:
const numbers = [4, 9, 2, 7];
console.log(Math.max(...numbers));
console.log(Math.min(...numbers));Результат:
9
2Объект с наибольшим значением
Чтобы получить сам объект, а не число, используйте reduce():
const players = [
{ name: 'Anna', score: 82 },
{ name: 'Oleg', score: 95 },
];
const best = players.reduce((top, player) => (player.score > top.score ? player : top));
console.log(best.name);Результат:
OlegСразу оба
Один проход reduce() может собрать и минимум, и максимум:
const temps = [12, -3, 25, 7];
const range = temps.reduce(
(acc, t) => ({ min: Math.min(acc.min, t), max: Math.max(acc.max, t) }),
{ min: Infinity, max: -Infinity },
);
console.log(range.min, range.max);Результат:
-3 25Частая ошибка
Для пустого массива Math.max() возвращает -Infinity, а без ... получает массив целиком и возвращает NaN:
console.log(Math.max(...[]));
console.log(Math.max([4, 9, 2]));Результат:
-Infinity
NaNФункции из этого ответа
- Math.max — Возвращает наибольшее из чисел.
- Math.min — Возвращает наименьшее из переданных чисел.
- Array.prototype.reduce — Сводит массив к одному значению.