J'ai tableau javascript, où chaque élément a référence à parent, et ils peuvent être en boucle (référence circulaire). Exemple:Comment arrêter cette fonction récursive?
[
{"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}
]
je avais besoin de créer une structure de données imbriqués en fonction enregistrement sélectionné pour l'afficher dans les DOM, que j'obtenus par fonction récursive comme ci-dessous (source 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
}
Il fonctionne très bien , mais pas pour les structures de données circulaires. La chose est que j'ai besoin d'arrêter l'exécution de la fonction avant qu'elle n'atteigne l'élément à partir duquel elle a démarré.
Comment puis-je y parvenir?
Ajoutez un argument (tableau par exemple) qui conserve une liste des ID visités afin que vous puissiez les vérifier et les arrêter le cas échéant. – Cyb3rFly3r
@ Cyb3rFly3r J'ai essayé mais j'ai obtenu des résultats bizarres ou incomplets. Pourriez-vous poster un exemple? Je place la condition au mauvais endroit. – Ketus
On ne sait pas exactement quel est le résultat attendu puisque le code original produit toujours un tableau vide. – HeadCode