JSFiddle - React, Tailwind, and code Playground

by Mohamed Rias

HTML

<div id="results">
    
</div>

JavaScript

var resolver, //fn

source = {
    "c1": [
        "c2",
        "c3"
    ],
    "c3": [
        "c4",
        "c5",
        "c1"
    ],
    "c4": [
        "c1"
    ],
    "c5": [
        "c3"
    ]
};





resolver = function (dependencies) {
    var order = [],
        depen = [];

    var arrayWalker = function (temp) {
        temp.forEach(function (second) {
            if (second in dependencies) {
                if (depen.indexOf(second) == -1) {
                    depen.push(second);
                    arrayWalker(dependencies[second]);
                    if (order.indexOf(second) == -1) order.push(second);
                }
            } else {
                if (order.indexOf(second) == -1) order.push(second);
            }
        });
    };

    for (var key in dependencies) {
        depen = []; // to check for circular dependencies
        depen.push(key);
        arrayWalker(dependencies[key]);
        if (order.indexOf(key) == -1) order.push(key);
    }
    return order;
};


console.log(resolver(source).join("\n"));