На данный момент у меня получилось вот такое решение на основе вашего. У него как минимум два минуса - в глобали хранится результат выполнения фунции + по условию задачи нужно в функцию передавать сам обьект, по которому производится поиск... Пока не придумал, как это обойти. Технически функция работает верно, но эти два момента меня смущают.
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'));
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.