Поиск по дереву файлов
Условие
Дерево узлов { id, name, children }. Поле поиска фильтрует дерево рекурсивно: папка показывается, если подходит сама или если подходит хоть один потомок; у показанной папки дети тоже отфильтрованы. Пустой запрос показывает всё. Узел рисуется как <div class="node" data-id>, внутри <span class="name">.
Что проверяют тесты
показывает всё без запроса
находит вложенный файл и оставляет родителя
совпадение по имени папки показывает её детей
нет совпадений
регистр не важен
исходное дерево не мутируется
Как подойти
Задача с реального собеседования в Яндексе. Ядро - рекурсивный фильтр, возвращающий новое дерево: сначала фильтруем детей, потом решаем судьбу узла. Тонкость, которую формулировка задаёт неявно: если совпала сама папка, её дети должны остаться целиком, а не быть отфильтрованы по тому же запросу - иначе найденная папка выглядит пустой. Неизменяемость обязательна: вход это пропс. Что назвать вслух: подсветка совпадений, раскрытие найденных веток, debounce при больших деревьях, мемоизация фильтрации.
Подсказки: 3
- Фильтрация рекурсивная и возвращает новое дерево, а не помечает старое.
- Узел остаётся, если подходит сам или подходит кто-то из потомков.
- У совпавшей по имени папки детей обрезать не надо - иначе пользователь не увидит содержимое найденной папки.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.