Написать функцию getArrayParams(...arr)
, которая получает на вход числа, а возвращает минимальное, максимальное и среднее арифметическое значений массива. Используйте rest-параметр для получения произвольного количества аргументов.
- Создайте функцию, которая принимает на ввод массив.
- Внутри функции задайте переменные
min, max, sum
, присвоив им некоторые первоначальные значения.
Подсказка. Подумайте, прежде чем открыть.
Первоначальные значения: min = Infinity, max = -Infinity. Также можно использовать в качестве min и max первый элемент массива.- Пройдите по массиву циклом
for
и для каждого элемента определите:
- если элемент больше предыдущего максимума, то максимум становится равен элементу;
- если элемент меньше предыдущего минимума, то минимум становится равен элементу;
- добавляем элемент к сумме
sum
для последующего вычисления среднего.
-
Для другого подхода можно использовать Math.max и Math.min. Для передачи всех аргументов используйте spread-оператор, а для суммирования элементов — метод reduce.
-
После прохождения цикла (п. 3) или использования другого подхода (п. 4), функция должна возвращать объект вида
{max:..., min: ..., avg:...}
, то есть минимальное, максимальное и средние значения. Чтобы вычислить среднее, надо сумму элементов поделить на их количество. Среднее надо округлить до двух знаков после запятой. Для округления используйтеtoFixed
. Заметьте,toFixed
возвращаетstring
. Так как вам нужно вернуть число (number
), то необходимо дополнительное преобразование значения к числу.
getArrayParams(-99, 99, 10) // { min: -99, max: 99, avg: 3.33 }
getArrayParams(1, 2, 3, -100, 10) // { min: -100, max: 10, avg: -16.80 }
getArrayParams(5) // { min: 5, max: 5, avg: 5 }
Представьте, что у вас есть мясорубка с разными насадками. Мясорубка запускает действие, а сам процесс зависит от того, какая будет насадка. Затем мясорубка применяет насадку ко всему мясу, которое в неё поступает, и выдаёт на выход только самый лучший кусок. Используйте rest-параметр для получения произвольного количества аргументов в каждой насадке.
У мясорубки есть несколько насадок-преобразователей:
- насадка суммирования элементов;
- насадка вычисления разницы максимального и минимального элементов;
- насадка вычисления разницы сумм чётных и нечётных элементов;
- насадка вычисления среднего значения чётных элементов.
- Напишите функцию
summElementsWorker
, которая должна находить сумму элементов массива и возвращать её. Суммирование элементов можно реализовать аналогично первому заданию c помощью цикла или методаreduce
. - Напишите функцию
differenceMaxMinWorker
для вычисления разницы максимального и минимального элементов.
- C помощью цикла или методов
Math.max
иMath.min
найдите максимальное и минимальное значения. - Возвращайте разницу этих значений.
- Напишите функцию
differenceEvenOddWorker
вычисления разницы сумм чётных и нечётных элементов.
- Объявите две переменные, например,
sumEvenElement
иsumOddElement
, в которых будут накапливаться чётные и нечётные элементы. Инициализируйте эти переменные начальными значениями — нулями. - Реализуйте цикл для перебора всех элементов массива.
- При переборе каждый элемент проверяйте с помощью конструкции
if / else
. - Если элемент чётный, то увеличивайте одну переменную (
sumEvenElement
), а если нечётный, то другую (sumOddElement
). - После выполнения цикла выполняйте возвращение разницы двух элементов.
- Напишите функцию
averageEvenElementsWorker
, которая будет вычислять среднее значение чётных элементов.
- Объявите две переменные, например,
sumEvenElement
иcountEvenElement
, в которых будут накапливаться сумма чётных элементов и их количество. Инициализируйте эти переменные начальными значениями — нулями. - Реализуйте цикл для перебора всех элементов массива.
- При переборе каждый элемент проверяйте с помощью конструкции
if
. - Если элемент чётный, то увеличивайте одну переменную (
sumEvenElement
) на перебираемый элемент, а другую переменную (countEvenElement
) — на единицу. - После выполнения цикла выполняйте возвращение результата деления суммы элементов на их количество.
- Во всех функциях должна быть проверка наличия элементов. Если элементы не передавались в функцию, то нет смысла что-либо считать и можно сразу возвращать ноль.
// summElementsWorker
console.log(summElementsWorker()); // 0
console.log(summElementsWorker(10, 10, 11, 20, 10)); // 61
// differenceMaxMinWorker
console.log(differenceMaxMinWorker()); // 0
console.log(differenceMaxMinWorker(10, 10, 11, 20, 10)); // 20 - 10 => 10
// differenceEvenOddWorker
console.log(differenceEvenOddWorker(94, 51, 57, 41, 47, 66, 58, 10, 38, 17)); // 266 - 213 => 53
console.log(differenceEvenOddWorker(15, 97, 85, 64, 67, 10, 69, 40, 15, 35)); // 114 - 383 => -269
// averageEvenElementsWorker
console.log(averageEvenElementsWorker(1, 2, 3, 4, 5, 6, 7, 8, 9)); // [2, 4, 6, 8] => 5
console.log(averageEvenElementsWorker(15, 97, 85, 64, 67, 10, 69, 40, 15, 35)); // [64, 10, 40] => 38
В предыдущем задании вам нужно было написать насадки к мясорубке — преобразователи данных. Теперь необходимо написать саму функцию мясорубки — агрегатор преобразований.
Напишите функцию makeWork
, которая из массива данных и насадки будет возвращать максимальный результат функции насадки.
- Функция
makeWork
принимает два аргумента:arrOfArr
иfunc
. В первом аргументе передаётся массив, элементы которого — массивы с данными, которые будут передаваться в функцию-насадку. Вторым аргументом передаётся одна из функций насадок. - Инициализируйте переменную (
maxWorkerResult
), в которой будет формироваться максимальный результат, и инициализуйте её начальным значением. Можно использовать самое минимальное числовое значение-Infinity
, либо использовать результат насадки от самого первого элемента из полученных данных (на позиции ноль массиваarrOfArr
). Используйте spread-оператор для разделения массива элементов на отдельные элементы. - Реализуйте цикл для перебора всех элементов массива
arrOfArr
. - Внутри цикла каждый перебираемый элемент передавайте в функцию-насадку. Используйте spread-оператор для разделения массива элементов на отдельные элементы. Результат функции сохраните в отдельную константу.
- Добавьте проверку: полученное значение больше переменной, в которой формируется максимальное значение?
- Если полученное значение больше переменной с максимумом, то переприсваивайте переменную максимума на полученное значение.
- После выполнение цикла в переменной максимума должно быть максимальное значение результатов насадки. Эту переменную следует возвращать из функции.
const arr = [[10, 10, 11, 20, 10], [67, 10, 2, 39, 88], [72, 75, 51, 87, 43], [30, 41, 55, 96, 62]];
console.log(makeWork(arr, summElementsWorker)); // максимум из 61, 206, 328, 284 => 328
console.log(makeWork(arr, differenceMaxMinWorker)); // максимум из 10, 86, 44, 66 => 86
console.log(makeWork(arr, differenceEvenOddWorker)); // максимум из 39, -6, -184, 92 => 92
console.log(makeWork(arr, averageEvenElementsWorker)); // максимум из 12.5, 33.333, 72, 62.666 => 72
- Все тесты успешно выполняются.
- Соблюдается кодстайл.
- Решение загружено в форкнутый репозиторий GitHub.
- Решение опубликовано в GitHub Pages.
- Откройте файл
task.js
в вашем редакторе кода и выполните задание. - Проверьте соблюдение кодстайла. Форматируйте ваш код через форматтер https://codebeautify.org/jsviewer.
- Вы можете написать функцию
testCase
для проверки вашей работы. - Добавьте файл
task.js
в индексgit
с помощью командыgit add %file-path%
, где%file-path%
— путь до целевого файлаgit add ./2.functions/task.js
. - Сделайте коммит, используя команду
git commit -m '%comment%'
, где%comment%
— это произвольный комментарий к вашему коммитуgit commit -m 'Второе задание полностью готово'
. - Опубликуйте код в репозиторий
homeworks
с помощью командыgit push -u origin main
. - На проверку пришлите 2 ссылки. На файл с решением (
task.js
) и на страницу GitHub Pages — страницу с автотестами:https://%USERNAME%.github.io/bjs-2-homeworks/2.functions
.
Никакие файлы прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачёта. Можете прислать на проверку как каждую задачу по отдельности, так и все задачи вместе. Во время проверки по частям у вашей домашней работы будет статус «На доработке».
Любые вопросы по решению задач задавайте в чате учебной группы.