Ich habe ein Objekt, das aus einem Menü besteht.Iterieren durch ein Objekt rekursiv Kind zu finden, Eltern, Großeltern etc. auf dem Weg zu sammeln
Ich möchte eine category ID
eingeben und die category name
bekommen, dann rückwärts gehen, um es zu finden ist parents
. Das ist nicht einfach innerhalb eines Objekts, also denke ich, die parents
auf dem Weg stattdessen zu fangen.
Das Problem, das ich habe, ist, wie reset
die parents
wenn das Ende Kind nicht gefunden wird und es gibt nirgendwo anders zu gehen.
Das ist, was ich versuche:
var data = [
\t {
"tree_id": "10",
"name": "babies & children",
"parent": null,
"position": "1"
}, {
"tree_id": "2",
"name": "clothing",
"parent": null,
"position": "1",
"children": [{
"tree_id": "15",
"name": "kids",
"parent": "2",
"position": "3",
"children": [{
"tree_id": "78",
"name": "fourToTen",
"parent": "15",
"position": "3",
"children": [{
"tree_id": "102",
"name": "fourToSix",
"parent": "78",
"position": "3"
}]
}]
}]
}, {
"tree_id": "55",
"name": "toys",
"parent": null,
"position": "1",
"children": [{
"tree_id": "35",
"name": "lego",
"parent": "55",
"position": "3"
}]
}
];
var crumbs = [];
function getParts(data, elem) {
for(var i = 0; i < data.length; i++) {
var obj = data[i];
if(obj.children !== undefined){
/* push parent into crumbs */
crumbs.push(obj.name);
\t if(obj.children[0].tree_id === elem){
\t /* if we've found what we're looking, we're done */
crumbs.push(obj.children[0].name);
console.log(crumbs);
} else {
\t /* reset parents */
crumbs = []; /* <-- this is wrong here */
/* not found, keep recursing */
\t getParts(obj.children, elem);
}
}
}
}
/* I want this to return
[
"clothing",
"kids",
"fourToTen",
"fourToSix"
]
but it returns
[
"fourToTen",
"fourToSix"
]
*/
getParts(data, '102');
Die Frage ist, wie kann ich die parents
Array speichern, bis ich am Ende der Leitung und das Kind bin, ist, nicht gefunden, und dann zurücksetzen?
Here's a fiddle if that's your preferred playround
Globals schlecht sind, versuchen Sie, Ihre Funktion umschreiben, so dass 'wantId' als Parameter übergeben wird. – georg
Tatsächlich sind Globals schlecht. –
Aktualisierte Antwort, hinterließ einen Kommentar –