PRO курс

JS: Деревья

1083 сообщения в сообществе 1846 учащихся

Этот курс посвящен знакомству с одной из наиболее часто используемых структур данных - деревьям

Подготовительный курс

JS: Коллекции

Уроки курса

  • 1

    Введение

    Познакомиться с курсом и его целями
  • 2

    Определения

    Разобраться с терминологией используемой при работе с деревьями

    тесты

  • 3

    Traversal

    Познакомиться с понятием "обход дерева"

    тесты

    упражнение

  • 4

    Map

    Реализовать отображение деревьев

    тесты

    упражнение

  • 5

    Filter

    Реализовать фильтрацию деревьев

    упражнение

  • 6

    Reduce

    Реализовать свертку на деревьях

    упражнение

  • 7

    Поиск

    Разобрать несколько примеров поиска по файловой структуре

    упражнение

  • 8

    Агрегация

    Попрактиковаться с разными способами агрегации данных по дереву.

    упражнение

Испытания

Это практические задания, которые мы советуем выполнить после завершения курса. Задания помогут вам получить дополнительный опыт в программировании и закрепить полученные навыки.

Автор

Кирилл Мокевнин

Сооснователь и технический директор образовательного проекта Hexlet. Программирует с 2007 года. За это время прошел путь от разработчика до технического директора и управляющего отдельным подразделением (филиалом). Управлял командами, в которых больше 50 разработчиков. Программирует на языках: elixir, clojure, javascript, php, ruby. Со-организатор конференции nastachku.ru. Вимер. Топит за DevOps и автоматизированные тесты.

Впечатления

Шикарная задача (: решил, но пришлось хорошо подумать.. вообще тема деревьев заставляет хорошо шевелить головой, особенно после плоских коллекций, где все намного более привычнее)

Чудо какое то. Решение с учительским совпало, два аргумента только по другому называются.

Задачку решила, сначала с костылями (хотя и этому было крайне рада), потом глянула учительское решение, попыталась разобраться.

Основная сложность для меня была в том, чтобы понять, какие данные должны накапливать два разных аккумулятора. Догадка была такой: асс - собирает массив из путей к нужному файлу, которые потом преобразуются в строку, а newAcc - собирает эти массивы (превращающиеся в строку) в один массив.

А оказалось, что оба аккумулятора должны собирать одни и те же данные (массив строк с путями), которые будут друг другу передавать. Красиво и просто.

Еще были проблемы с undefined, которые приходилось отдельно фильтровать. Возникали они потому, что я проверяла только непустые папки, а при редьюсе на месте пустых возникал undefined.

Магия! 20 минут писал решение, и с мыслями "ну с первого раза то точно не получится, сейчас буду везде добавлять console.log и разбираться подробнее" жму на кнопку Проверить, а оно раз зелененьким! Это было очень неожиданно, но приятно

Отличная задачка! Спасибо!

В начале как это часто тут бывает ничего не было понятно. Не могла понять, какие объекты нужно возвращать и как их записать, чтобы сохранить структуру. Склонялась то к reduce и map (хотя очевидно, что можно использовать то и другое).

Пришла к тому, что основные преобразования должны происходить внутри главной части функции, а map или reduce должны нам возвращать массив, внутри которого рекурсивный вызов функции с переданным в него объектом. Результат работы map или reduce нужно передать в свойство children итогового возвращаемого объекта. Чтобы возвратить остальные свойства объекта можно воспользоваться или destructuring assigment для объекта (как я сначала сделала) или ...spread, как я поняла после просмотра решения учителя.

Моё решение.

продолжительность
17 часов
награда
44 балла
Получить доступ к курсу