JSFiddle - React, Tailwind, and code Playground

by Andrey

JavaScript

const tickets = [
'Lviv-Warshaw',
'Prague-Vienna',
'Warshaw-Prague',
'Kharkiv-Kyiv',
'Kyiv-Lviv'
];


const ticketsMetadata = ticketsHandler(tickets);
ticketsLength = Object.keys(ticketsMetadata).length-1
const sortedCities = [];
let firstCity;
let lastCity;

function ticketsHandler(_tickets){
	const cities = {};  

	_tickets.forEach(item => {
  const depart = item.split('-')[0];
  const arrival = item.split('-')[1]
  
 		if(!cities[depart]){ 
      cities[depart] = {
      	cityName: depart,
      	isFirst: true,
        next: arrival,
        isArrival: true
        
      }
    } else {
      	cities[depart].isFirst = false;
      	cities[depart].isLast = false;
      	cities[depart].next = arrival;                	
    }
		if(!cities[arrival]){
      cities[arrival] = {
        cityName: arrival,
        isLast: true,
        isFirst: false,
        previous: depart
      }
    } else {
      cities[arrival].cityName = arrival;
      cities[arrival].isFirst = false;
      cities[arrival].isLast = false;
      cities[arrival].previous = depart;      
    }	    
  });
  
	return cities;
}

console.log(ticketsMetadata);
firstCity = extreme(ticketsMetadata, 'isFirst');
lastCity = extreme(ticketsMetadata, 'isLast');

function extreme(_ticketsMetadata, position){  
	for(let city in _ticketsMetadata){
    if(_ticketsMetadata[city][position]) {
        return city;
      }
	}  
};

sorting(ticketsMetadata[firstCity]);

function sorting(city){
	if(sortedCities.length < ticketsLength){
  	sortedCities[sortedCities.length] = `${city.cityName}-${city.next}`;
  	sorting(ticketsMetadata[city.next]);
  }  
}

console.log(`Traveling from ${firstCity} to ${lastCity}`);
console.log(sortedCities);