Найти наибольшее значение в массиве с помощью 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 перебирает именно значения в итерируемой коллекции, а не их числовые индексы (ключи).

→ Ссылка