JSFiddle - React, Tailwind, and code Playground
JavaScript
function findFrom(routes, dest) {
let from = null;
routes.forEach(function(cv, i, arr) {
if (cv[1] == dest) {
//console.log('found - ' + cv[1]);
from = cv[0];
}
});
return from;
}
function findDest(routes, from) {
let dest = null;
routes.forEach(function(cv, i, arr) {
if (cv[0] == from) {
//console.log('found - ' + cv[1]);
dest = cv[1];
}
});
return dest;
}
function findRoutes(routes) {
var output = [];
//start with first one
if (routes.length == 0) {
return output;
}
//find starting point
var firstFrom = null;
var from = routes[0][0];
var dest = null;
var counter = 0;
do {
firstFrom = findFrom(routes, from);
if (firstFrom != null) {
from = firstFrom
}
counter++;
} while (firstFrom != null && counter < routes.length);
//write down starting point
output.push(from);
//find subsequent elements
counter = 0; //reset
do {
dest = findDest(routes, from);
if (dest != null) {
output.push(dest);
from = dest;
}
counter++;
} while (dest != null && counter < routes.length);
return output;
}
console.log(findRoutes([["USA","BRA"],["JPN","PHL"],["BRA","UAE"],["UAE","JPN"]]));
console.log(findRoutes([["Chicago", "Winnipeg"], ["Halifax", "Montreal"], ["Montreal", "Toronto"], ["Toronto", "Chicago"], ["Winnipeg", "Seattle"]]));