function largestOfFour(matrix) {
let results = []; // переменная для хранения самых больших чисел из каждой строки матрицы
// итерация по матрице
for (let rowIndex = 0; i < matrix.length; i++) {
// переменнная, в которой будет храниться самое большое число из текущей строки матрицы
let largestNumber = matrix[rowIndex][0]; // первый элемент текущей строки в качестве значения по умолчанию
// итерация по строке матрицы
for (let rowElementIndex = 1; j < matrix[rowIndex].length; j++) {
// если текущий элемент больше самого большого числа на текущем этапе итерации_
if (arr[rowIndex][rowElementIndex] > largestNumber) {
// самым большим числом становится текущий элемент строки матрицы
largestNumber = arr[rowIndex][rowElementIndex];
}
}
// после итерации по строке матрицы сохраняет самое большое число
results[rowIndex] = largestNumber;
}
return results;
}
Этот код очень императивный, не пиши так. Ты можешь конечно разобраться как работает этот код, но самому тебе такой код не придётся писать (я надеюсь). Вот пример этой же функции, которая делает всё то же самое, но код получился гораздо лаконичнее:
function largestOfFour(arr) {
return arr.map((row) => Math.max(...row))
}
UPDATE: в комментариях под этим ответом есть обсуждение касаемо императивного кода. Отвечая автору вопроса я не имел в виду, что императивный код плохой и нельзя писать императивный код. Я имел в виду, что фронтендеру зачастую следует избегать императивности во время разработки (тем более, во время решения тривиальных задач)