JavaScript: получить минимальный и максимальный элемент массива
Введение
При работе с JavaScript мы часто сталкиваемся с ситуациями, требующими получения минимального и максимального элементов массива — будь то установка границ для ползунка или отображение статистики пользователю.
В этой статье мы рассмотрим, как получить минимальный и максимальный элемент массива в JavaScript. Мы также рассмотрим четыре различных метода и сравним их скорость при работе с большими массивами.
Как получить минимальное и максимальное количество элементов массива с помощью Математики объект
Math
— это встроенный в JavaScript глобальный удобный объект, содержащий множество методов и констант, которые могут вам понадобиться при выполнении математических операций. В этой статье мы будем использовать два метода: Math.min()
и Math.max()
- оба они принимают список чисел в качестве аргументов. Как следует из их названий, один возвращает элемент с наименьшим значением, а другой возвращает элемент с наибольшим значением:
console.log(Math.min(20, 23, 27));
console.log(Math.max(20, 23, 27));
console.log(Math.min(-20, -23, -27));
console.log(Math.max(-20, -23, -27));
Если хотя бы один из переданных элементов не является числом или не может быть преобразован в число, оба Math.min()
и Math.max()
Возвращает NaN
:
console.log(Math.min('-20', -23, -27));
console.log(Math.max('number', -23, -27));
Точно так же, если мы попытаемся передать массив в качестве аргумента функции Math.min()
функцию, мы получаем NaN
, так как он рассматривается как один элемент, который нельзя преобразовать в скалярное значение:
const myArray = [2, 3, 1];
console.log(Math.min(myArray));
Однако быстрое решение этой проблемы — использовать оператор распространения для развертывания элементов:
const myArray = [2, 3, 1];
console.log(Math.min(...myArray));
Если вы хотите узнать больше об Операторе спреда – прочитайте наш Руководство по оператору спреда в JavaScript!
Получите максимальный и минимальный элемент с помощью уменьшения ()
Операции редукции, иногда называемые складывающиеся, являются одними из самых мощных операций функционального программирования с широким спектром приложений. reduce()
функция, запускает функцию-редуктор (определенную в обратном вызове) для каждого элемента массива и в конце возвращает одно значение.
Стоит рассказать об этом методе из-за универсальности его применения:
const myArray = [20, 23, 27];
let minElement = myArray.reduce((a, b) => {
return Math.min(a, b);
});
console.log(minElement);
Найдите минимальный и максимальный элемент с помощью применять()
Ассоциация apply()
метод используется для вызова функции с заданным this
значение и массив аргументов. Это позволяет нам вводить массивы в Math.min()
статическая функция:
const myArray = [20, 23, 27];
let minElement = Math.min.apply(Math, myArray);
console.log(minElement);
let minElement = Math.min.apply(null, myArray);
console.log(minElement);
Получение минимального и максимального количества элементов с помощью стандартных циклов — максимальная производительность
Циклы используются в JavaScript для выполнения повторяющихся задач на основе условия. Условия возврата true
or false
. Цикл будет продолжать работать до тех пор, пока определенное условие не вернется false
. В нашем случае мы будем использовать for
цикл — обычно используется для многократного запуска кода.
Получить минимальный элемент
Во-первых, мы инициализируем минимальный элемент первым элементом массива. Затем мы проходим через весь массив чтобы увидеть, меньше ли значение любого другого элемента текущего минимального значения - если это так, мы установим новое минимальное значение на значение текущего элемента:
const myArray = [20, 23, 27];
let minElement = myArray[0];
for (let i = 1; i < arrayLength; ++i) {
if (myArray[i] < minElement) {
minElement = myArray[i];
}
}
console.log(minElement);
Получить максимальный элемент
Сначала мы инициализируем максимальный элемент первым элементом в массиве. Затем мы пройдемся по всему массиву, чтобы увидеть, больше ли какой-либо другой элемент, чем инициализированный элемент, поэтому он заменяет его:
const myArray = [20, 23, 27];
let maxElement = myArray[0];
for (let i = 1; i < arrayLength; ++i) {
if (myArray[i] > maxElement) {
maxElement = myArray[i];
}
}
console.log(maxElement);
Тест производительности
Используя JS Benchmark — мы запустили все эти подходы с различными входными данными, от 100 до 1000000 элементов в массиве. Производительность относительна и зависит от длины массива.
Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!
- Для небольших массивов (100)
reduce()
метод сработал лучше всего, за ним следуют стандартные циклы, оператор спреда, а затемapply()
метод. Участники, занявшие второе место, практически равны по производительности. - Для средних массивов (1000) лучше всего работают стандартные циклы, за которыми следуют
reduce()
, оператор спреда иapply()
метод. Стандартные циклы значительно быстрее, чемreduce()
здесь, что, в свою очередь, довольно быстрее, чем у занявших второе место. - Для действительно больших массивов (1000000) стандартные циклы настолько превосходят все другие методы, что аргументы в пользу стандартных циклов очень веские.
Стандартные циклы очень хорошо масштабируются и проигрывают конкурентам только при применении к небольшим массивам. Если вы имеете дело с несколькими элементами или небольшими массивами, все методы будут довольно простыми. Чем больше массив, тем больше преимуществ от использования стандартных циклов.
Примечание: Не принимайте бенчмарки за чистую монету! Они запускаются на разных машинах, вероятно, с разными версиями браузеров и движками JS. Протестируйте их в своем приложении и выберите масштабируемый и самый быстрый вариант для своего случая использования.
Заключение
В этом руководстве мы рассмотрели, как получить минимальное и максимальное количество элементов массива в JavaScript. Мы взглянули на Math.min()
и Math.max()
методы, оператор спреда, reduce()
Метод, apply()
метод и написал собственный подход к получению элементов через for
петля.
Наконец, мы сравнили результаты, отметив, что на самом деле не имеет значения, какой подход вы используете для небольших массивов, в то время как вы должны использовать стандартные циклы for для больших массивов.
Последнее обновление: 11 мая 2022 г.
Вам также может понравиться…
Получайте учебные пособия, руководства и задания разработчиков на свой почтовый ящик.
© 2013-2022 Stack Abuse. Все права защищены.