@Sherlok_homs

Как понять нижеуказанный код Javascript?

Всем привет, изучаю Javascript, разъясните код, пожалуйста.
Задача - есть массив, определить наибольшее числов в массиве из 4-х массивов ( ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])

function largestOfFour(arr) {
  let results = [];
  for (let i = 0; i < arr.length; i++) {
    let largestNumber = arr[i][0];
    for (let j = 1; j < arr[i].length; j++) {
      if (arr[i][j] > largestNumber) {
        largestNumber = arr[i][j];
      }
    }
    results[i] = largestNumber;
  }

  return results;
}


Я правильно понимаю, что сначала создается переменная результатов массива? Затем пошел цикл, который сравнивает первое число 4 с нулем и присвает, что это наибольшее значение? Что сравнивает второй перебор с переменной j?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
ZerdoX-x
@ZerdoX-x
Frontend developer influenced by web, a11y, crypto
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: в комментариях под этим ответом есть обсуждение касаемо императивного кода. Отвечая автору вопроса я не имел в виду, что императивный код плохой и нельзя писать императивный код. Я имел в виду, что фронтендеру зачастую следует избегать императивности во время разработки (тем более, во время решения тривиальных задач)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@antares4045
function largestOfFour(arr) { 
  let results = []; //аккамулятор результатов
  for (let i = 0; i < arr.length; i++) { //для каждой строки матрицы arr
    let largestNumber = arr[i][0]; //пердпологаем, что первое число в строке является максимальным
    for (let j = 1; j < arr[i].length; j++) { //для всех чисел в строке, начиная со второго
      if (arr[i][j] > largestNumber) { // если текущее число больше нашего текущего максимума
        largestNumber = arr[i][j]; // обновляем значение максимума
      }
    }
    results[i] = largestNumber; //кладём текущий максимум в аккамулятор
  }

  return results; //возвращаем аккамулятор как результат работы функции
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы