> Как реализовать построение полного маршрута из массива билетов в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: VK
Стек: React
> Пример ответа
Для реализации построения полного маршрута из массива билетов в React можно использовать следующий подход:
-
Структура данных: Представим билеты как объекты с полями
fromиto. -
Алгоритм: Используем хеш-таблицу (Map) для быстрого поиска. Сначала строим словарь
from -> to, затем находим начальную точку (город, который есть вfrom, но отсутствует вto). -
Реализация:
JSXimport { useState, useMemo } from 'react';const buildRoute = (tickets) => {const fromMap = new Map();const toSet = new Set();tickets.forEach(({ from, to }) => {fromMap.set(from, to);toSet.add(to);});// Находим начальный городlet start = null;for (const [from] of fromMap) {if (!toSet.has(from)) {start = from;break;}}// Строим маршрутconst route = [];let current = start;while (current) {route.push(current);current = fromMap.get(current);}return route;};const RouteBuilder = ({ tickets }) => {const route = useMemo(() => buildRoute(tickets), [tickets]);return (<div><h3>Маршрут:</h3><ul>{route.map((city, index) => (<li key={index}>{city}{index < route.length - 1 && ' → '}</li>))}</ul></div>);};
Ключевые моменты:
-
Используем
useMemoдля оптимизации пересчета маршрута при изменении билетов. -
Алгоритм работает за O(n), где n - количество билетов.
-
Обрабатываем случай, когда билеты образуют корректный маршрут (без циклов и разрывов).
Пример использования:
JSXconst tickets = [{ from: 'Москва', to: 'Санкт-Петербург' },{ from: 'Казань', to: 'Москва' },{ from: 'Санкт-Петербург', to: 'Владивосток' }];// Результат: ['Казань', 'Москва', 'Санкт-Петербург', 'Владивосток']
> Похожие задачи по frontend
Нужно ли мемоизировать данные, полученные из Redux селектора в компоненте
Какие жизненные циклы есть у классовых компонентов и как они реализованы в функциональных
Как происходит оптимизация с виртуальным деревом в React
В чем разница между React.Fragment и пустыми скобками в React
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью