Найти наибольшее значение в массиве с помощью for..of
Задание:
Найти наибольшее значение в массиве с помощью for..of
Решение:
let arr = [1,2,3,4,5,6,7,8,9];
let max = 0;
for (let i of arr) {
if (max > arr[i]){
max = arr[i];
}
}
console.log(max);
Где ошибка?
Ответы (3 шт):
Автор решения: Eoan Ermine
→ Ссылка
Вы проверяете, не больше ли максимального значения текущий элемент массива, по которому вы итерируетесь, а больше ли максимальное значение текущего элемента.
Корректный код:
let arr = [1,2,3,4,5,6,7,8,9];
let max = 0;
for (let i of arr) {
if (arr[i] > max){
max = arr[i];
}
}
console.log(max);
Автор решения: Pavel Nazarian
→ Ссылка
let arr = [-1,5,9,14,-5,16,-7,8,10];
let max;
for (el of arr) {
max = el > max ? el : max || el;
}
console.log(max);
Автор решения: yar85
→ Ссылка
Где ошибка?
Допущено три ошибки:
- взятие значения из массива по индексу текущего значения (
arr[i]- в начальном кодеiуже содержит значение на текущей итерации, т.е. не надо его в качестве индекса использовать) - в ветвлении прописано условие "наоборот", почти ровно противоположное условию задачи (используется проверка
max > i, хотя предполагаетсяi > max) - инициализация
maxнулем, что приведет к некорректным результатам при наличии в массиве отрицательных чисел (надежнее будет использовать наименьшее числовое значение - отрицательной бесконечности,-Infinity)
Исправленный код решения:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let max = -Infinity;
for (let num of arr) {
if (num > max) {
max = num;
}
}
console.log(max);
Главное что нужно понимать в контексте вопроса: цикл for..of перебирает именно значения в итерируемой коллекции, а не их числовые индексы (ключи).