Ich habe Javascript Array, wo jedes Element Verweis auf Eltern hat, und sie können geloopt werden (Zirkelverweis). Beispiel:Wie kann diese rekursive Funktion gestoppt werden?
[
{"id": 1, "firstName": "Macko","parentId": 12},
{"id": 2, "firstName": "Jess","parentId": 1},
{"id": 3, "firstName": "Peter","parentId": 1},
{"id": 4, "firstName": "Lisa", "parentId": 1},
{"id": 5, "firstName": "Megan","parentId": 1},
{"id": 6, "firstName": "John", "parentId": 4},
{"id": 7, "firstName": "Joe", "parentId": 4},
{"id": 8, "firstName": "Matthew","parentId": 2},
{"id": 9, "firstName": "Peter","parentId": 2},
{"id": 10, "firstName": "Dio","parentId": 5},
{"id": 11, "firstName": "Hello","parentId": 5},
{"id": 12, "firstName": "Ana", "parentId": 4}
]
I verschachtelte Datenstruktur auf ausgewählte Datensatz basierend schaffen benötigen es im DOM anzuzeigen, die ich durch rekursive Funktion wie unten erreicht (Quelle here)
function getNestedChildren(arr, parent) {
var out = []
for(var i in arr) {
if(arr[i].parent == parent) {
var children = getNestedChildren(arr, arr[i].id)
if(children.length) {
arr[i].children = children
}
out.push(arr[i])
}
}
return out
}
Es funktioniert wirklich gut , aber nicht für zirkuläre Datenstrukturen. Die Sache ist, dass ich die Funktionsausführung stoppen muss, bevor sie das Element erreicht, von dem sie gestartet wurde.
Wie kann ich das erreichen?
fügen Sie ein Argument hinzu (z. B. Array), das eine Liste der besuchten IDs enthält, damit Sie es überprüfen und gegebenenfalls stoppen können. – Cyb3rFly3r
@ Cyb3rFly3r Ich habe das versucht, aber seltsame oder unvollständige Ergebnisse erhalten. Könnten Sie ein Beispiel veröffentlichen? Ich stelle den Zustand wahrscheinlich an die falsche Stelle. – Ketus
Es ist unklar, was Ihr beabsichtigtes Ergebnis ist, da der ursprüngliche Code immer ein leeres Array erzeugt. – HeadCode