Вопрос №55204 от пользователя Daria Sidorenko в уроке «Агрегация», курс «JS: Деревья»

Daria Sidorenko

Прохожу этот курс уже во второй раз (и прям гораздо легче дело идет!) и помню, что где-то всплывал раньше вопрос о том, почему во время return 1 в термальном условии создается в итоге массив - как будто единичка пушится в массив. Хотя там нет явного push нигде. Подскажите, пожалуйста, что об этом почитать?

Вот этот кусок теории:

const getNodesCount = (tree) => {
  if (isFile(tree)) {
    // Возвращаем 1 для учёта текущего файла
    return 1;
  }

2 0

Roman Ashikov

На самом деле тут не нужно читать ничего кроме документации по map(). :) По факту условие, которое вы привели именно для этого метода, когда функция вызывается рекурсивно внутри map(), кроме случая когда мы передали в функцию файл (тогда сразу вернётся 1, и выполнение завершится). Внимательно посмотрите на этот участок кода из примера:

const descendantCounts = children.map(getNodesCount);
// Возвращаем 1 (текущая директория) + общее количество потомков
return 1 + _.sum(descendantCounts);

Единица в return — это текущая директория, например, корень /. А дальше по потомкам этой директории идёт children.map(getNodesCount) — константа descendantCounts, который и возвращает массив. Если это директория, то срабатывает последний return из примера, если это файл, то первый return. И значение попадает в массив, а далее, когда рекурсия поднимается вверх _.sum() суммирует всех потомков. Это происходит последовательно для всех директорий, начиная от корневой. Немного поискал похожие вопросы и, возможно, вам будут полезны эти топики:

https://ru.hexlet.io/topics/47393 https://ru.hexlet.io/topics/41230

3

Вячеслав Межуревский

Проще говоря, первый If - это условие останова рекурсии?

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев