显示城市路线的Javascript函数

我正在 codewars.com 上练习编码。我遇到了 this question

我们正在追查我们的流氓特工 Matthew Knight A.K.A。罗伊米勒和他从一个地方到另一个地方旅行以避免被追踪。他的每一次旅行都基于一个不寻常或不正确顺序的行程列表。任务是确定他在每一次旅程中将采取的路线。您将获得一系列他的行程路线。根据他的行程,仅列出他将按正确顺序去的地方。

示例:路线 = [[USA, BRA], [JPN, PHL], [BRA, UAE], [UAE, JPN]]

结果: "USA, BRA, UAE, JPN, PHL"

我已尝试使用以下代码:

function findRoutes(routes) {

    let newArr = Array.prototype.concat.apply([], routes)
    let unique = newArr.filter((v, i, a) => a.indexOf(v) === i);

    return unique.join(', ');

}
console.log(findRoutes([["USA","BRA"],["JPN","PHL"],["BRA","UAE"],["UAE","JPN"]]))

它只适用于给定的情况,但是当我尝试另一个测试用例时:

[["Chicago", "Winnipeg"], ["Halifax", "Montreal"], ["Montreal", "Toronto"], ["Toronto", "Chicago"], ["Winnipeg", "Seattle"]]

如果失败了……因此我知道出了点问题,因为运动应该是有序的。我很乐意改进它或从不同的想法重写。

stack overflow Javascript function to show routes of the cities followed
原文答案

答案:

作者头像

为了找到第一个城市,我发现开始和终点之间的区别

Java上的解决方案;

    List<String> beginning = new ArrayList();
    List<String> end = new ArrayList();
    HashMap<String, String> hashMap = new HashMap<>();

    for (int i = 0; i < routes.size(); i++) {
        beginning.add(routes.get(i).get(0));
        end.add(routes.get(i).get(1));
        hashMap.put(routes.get(i).get(0), routes.get(i).get(1));
    }

    beginning.removeAll(end); // the difference of list

    String result = beginning.get(0) + ", ";// first place
    String nextOne = hashMap.get(beginning.get(0));
    while (hashMap.get(nextOne) != null) {
        result += nextOne + ", ";
        nextOne = hashMap.get(nextOne);
    }
    result += nextOne;

    return result;