Требуется написать функцию getArrayParams(arr)
, которая получает на вход массив чисел от -100 до 100 и возвращает минимальное, максимальное и среднее арифметическое значений массива.
- Создайте функцию которая принимает на ввод массив.
- Внутри функции задайте 3 переменных
min, max, sum
присвоив им некоторые первоначальные значения.
Какие значения? (внутри подсказка, подумайте прежде чем открыть)
min = Infinity max = -InfinityТакже можно использовать в качестве min и max первый элемент массива.
- Пройдите по массиву циклом
for
либоwhile
и для каждого элемента определите:- Если элемент больше предыдущего максимума, то максимум становится равен элементу
- Если элемент меньше предыдущего минимума, то минимум становится равен элементу
- Добавляем элемент к сумме
sum
для последующего вычисления среднего.
- После прохождения цикла функция должна возвращать объект вида:
{max:..., min: ..., avg:...}
, то есть минимальное, максимальное и средние значения. Чтобы вычислить среднее надо сумму элементов поделить на их количество. Среднее надо округлить до 2х знаков после запятой (для округления воспользуйтесь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 }
Представьте, что у нас есть мясорубка с разными насадками. Мясорубка запускает процесс, а сам процесс зависит от того, какая будет насадка. Затем мясорубка применяет насадку ко всему мясу, которое в неё поступает и выдаёт на выход только самый лучший кусок.
Пусть дан массив, каждый элемент которого в свою очередь является массивом чисел, например arrOfArr=[[1, 2, 3, 4], [10, 20, -10, -20]]
. Необходимо среди всех массивов найти такой, сумма элементов которого максимальна и вывести сумму.
Задачу можно разбить на две части:
- написать функцию, которая будет считать сумму элементов массива - это "насадка мясорубки"
- написать функцию, которая применит "насадку" ко всем массивам, которые поступили нам на вход - это "мясорубка"
- тогда входные данные, массив массивов, являются "мясом"
Итак, напишем две функции: makeWork(arrOfArr,func)
- в наших терминах это мясорубка и worker(arr)
- это насадка.
- Напишите функцию
worker
которая должна находить сумму элементов массива и возвращать её. - Функция
makeWork
принимает входные данные - массив массивов (мясо) и функциюworker
- это насадка, таким образомmakeWork
- функция высшего порядка. - Затем
makeWork
применяет полученную функциюworker
к каждому из полученных массивовworker(arrOfArr[i])
вычисляя таким образом сумму элементов. - Если сумма больше предыдущего максимума, то меняем максимум (его следует хранить в отдельной переменной и задавать в начале функции
makeWork
)
Таким образом наша мясорубка не только перемалывает (находит сумму чисел каждого массива) но и возвращает самый жирный кусок (с максимальной суммой)
Совет: Напишите функцию worker
, которая должна находить сумму элементов массива и возвращать её.
Протестируйте функцию отдельно на своих примерах, например на (https://jsbin.com). Убедитесь, что она работает.
Затем передайте её в makeWork
(обратите внимание, что внутри она попадет в переменную func
и мы сможем вызывать её func(arr)
).
Итерируйтесь по массиву arrOfArr
с помощью цикла, выполняя worker
для каждого элемента (находя сумму), и если она больше ранее найденного максимума - присваивайте max = sum
.
Попробуем реализовать другую насадку для нашей мясорубки. Для этого напишем функцию worker2
которая должна находить разность максимального и минимального значения внутри массива. Это можно интерпретировать как расстояние между минимумом и максимумом. Заметьте, что данная разность - всегда неотрицательное число (используйте Math.abs()
для вычисления модуля числа). Затем используйте данную насадку как аргумент для функции makeWork.
//worker
console.log(worker([1, 2, 3])); // 6
console.log(worker([4, 5, 6])); // 15
let arrOfArr = [[1, 2, 3], [4, 5, 6]];
makeWork(arrOfArr, worker); // 15
console.log(worker([10, 10, 11])); // 31
console.log(worker([20, 10])); // 30
arrOfArr = [[10, 10, 11], [20, 10]];
makeWork(arrOfArr, worker); // 31
console.log(worker([0, 0, 0])); // 0
console.log(worker([-1, -100])); // -101
arrOfArr = [[0, 0, 0], [-1, -100]];
makeWork(arrOfArr, worker); // 0
//worker2
console.log(worker2([-10, -20, -40])); // -40 - (-10) = -30 => 30
console.log(worker2([10, 20, 30])); // 30 - 10 = 20
arrOfArr = [[-10, -20, -40], [10, 20, 30]];
makeWork(arrOfArr, worker2); // 30
console.log(worker2([0, 0, 0])); // 0 - 0 = 0
console.log(worker2([-1, -99])); // -99 - (-1) = -98 => 98
arrOfArr = [[0, 0, 0], [-1, -99]];
makeWork(arrOfArr, worker2); // 98
-
браузер;
-
редактор кода, например Sublime или Visual Studio Code;
-
аккаунт на GitHub (инструкция по регистрации на GitHub);
-
система контроля версий Git, установленная локально (инструкция по установке Git);
-
запуск всех тестов должен успешно выполнять все тесты:
1. Перейдите в папку задания cd ./2.functions
.
2. Откройте файл task.js
в вашем редакторе кода и выполните задание.
3. Самостоятельно вызывать функции не требуется, если это не требуется по заданию.
4. Откройте файл index.html
в вашем браузере и с помощью консоли DevTools
убедитесь в правильности выводимых результатов.
5. Откройте файл test-runer.html
в вашем браузере и убедитесь, что все тесты выполняются (на вкладке Spec List
можно видеть какие тесты выполнились, а какие нет).
6. Добавьте файл task.js
в индекс git
с помощью команды git add %file-path%
, где %file-path%
- путь до целевого файла git add task.js
.
7. Сделайте коммит, используя команду git commit -m '%comment%'
, где %comment%
- это произвольный комментарий к вашему коммиту git commit -m 'first commit variables'
.
8. Опубликуйте код в репозиторий homeworks
с помощью команды git push -u origin main
.
9. Пришлите ссылку на репозиторий через личный кабинет на сайте Нетологии.
Никаких файлов прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачета. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом "На доработке".
Любые вопросы по решению задач задавайте в чате учебной группы.