• JavaScript - как проверить, есть ли в объекте циклические ссылки?

    @iSnaker Автор вопроса
    На данный момент у меня получилось вот такое решение на основе вашего. У него как минимум два минуса - в глобали хранится результат выполнения фунции + по условию задачи нужно в функцию передавать сам обьект, по которому производится поиск... Пока не придумал, как это обойти. Технически функция работает верно, но эти два момента меня смущают.

    let hasDepengency = false;
    // поиск циклических ссылок в объекте
    const hasCircularDepengency = (entrypoint, path = new Set([])) => {
    
        const branch = data[entrypoint];
        const newPath = new Set([...path, entrypoint]);
    
        if (branch) {
            console.log("branch", branch, "path", newPath);
    
            for (let i = 0; i < branch.length; i++) {
                const nextEntry = branch[i];
    
                if (path.has(nextEntry)) {
                    console.warn(`Circular depengency ${nextEntry} in ${entrypoint}`, path);
                    hasDepengency = true;
                    continue;
                } else {
                    hasCircularDepengency(nextEntry, newPath);
                }
            }
        }
    
        return hasDepengency;
    };
    
    const data = {
        "index.js": ['foo.js', 'lol.js'],
        "foo.js": ['baz.js', 'lol.js'],
        "baz.js": ['bar.js', 'lem.js'],
        "bar.js": ['bazz.js', 'k.js'],
    };
    
    console.log(hasCircularDepengency('index.js'));