Untitled
unknown
javascript
4 years ago
2.1 kB
8
Indexable
var data = [
{
id: 'a',
dependencyId: 'c',
label: 'A'
},
{
id: 'b',
dependencyId: 'a',
label: 'B'
},
{
id: 'c',
dependencyId: 'b',
label: 'C'
}
];
// Amen andam kara lini inch vor meki dependency-n kam inqy unena inch vor dependecy.
// Mi hat dependenciesCount em pahum. da kaxvacutyunner qanakn e (kara inqy unena kaxvacutyun kam iranic karan unenan kaxvacutyunner)
var isCyclic = (array) => {
// nax mi hat senc object em sarqum.
// {
// a: { id: 'a', dependencyId: 'c', label: 'A', dependenciesCount: 0 },
// b: { id: 'b', dependencyId: 'a', label: 'B', dependenciesCount: 0 },
// c: { id: 'c', dependencyId: 'b', label: 'C', dependenciesCount: 0 },
// }
var obj = {};
for (var i = 0; i < array.length; i++) {
var item = array[i];
obj[item.id] = { ...item, dependenciesCount: 0 }
}
// hima verevum stacvac objecti vrayov frum em u ete inqy uni
// dependencyId, apa ira dependenciesCount-y +1 em anum. u gnum em ira dependencyId-ov
// object-i dependenciesCount-y +1 em anem.
for (key in obj) {
var value = obj[key];
if (value.dependencyId) {
value.dependenciesCount++;
obj[value.dependencyId].dependenciesCount++;
}
}
// stanum em senc ban
// {
// a: { id: 'a', dependencyId: 'c', label: 'A', dependenciesCount: 2 }, // because a-n kaxvac e c-ic, b-n el a-ic e kaxvac
// b: { id: 'b', dependencyId: 'a', label: 'B', dependenciesCount: 2 }, // because b-n kaxvac e a-ic, c-n el b-ic e kaxvac
// c: { id: 'c', dependencyId: 'b', label: 'C', dependenciesCount: 2 }, // because c-n kaxvac e b-ic, a-n el c-ic e kaxvac
// }
// u ete es objektneri bolori dependenciesCount-nery havasar en 2-i uremn cyclic a.
var notCyclic = Object.values(obj).map(({ dependenciesCount }) => dependenciesCount).find(count => count !== 2);
var cyclic = !notCyclic;
return cyclic;
}
isCyclic(data);Editor is loading...