Ich habe eine App mit JavaScript geschrieben. In dieser App habe ich einen Baum von JavaScript-Objekten. Ein Beispielbaum und der folgende Code sind in dieser JSFiddle zu sehen.JavaScript - rekursiv finden Elternknoten
Ich versuche, eine Funktion zu schreiben, die eine Liste der IDs zurückgibt, die die Vorfahren sind. Die Vorfahren eines Elements mit einer bestimmten ID. Derzeit habe ich folgendes:
function getAncestors(childId, branch) {
var ancestors = [];
for (var i = 0; i < branch.length; i++) {
for (var j = 0; j < branch[i].children.length; j++) {
if (branch[i].children[j].id === childId) {
ancestors.push(branch[i].id);
return ancestors;
} else {
var _ancestors = getAncestors(childId, branch[i].children);
for (var k = 0; k < _ancestors.length; k++) {
if (ancestors.indexOf(_ancestors[k]) === -1) {
ancestors.push(_ancestors[k]);
}
}
}
}
}
return ancestors;
}
Es gibt immer das erste Elternteil zurück. Es gibt jedoch nicht alle Vorfahren zurück. Zum Beispiel versuche ich in der JSFiddle, ein Array, das enthält: [201, 2], in dieser Reihenfolge. Ich bin mir nicht sicher, was ich falsch mache. Ich starre weiter und es sieht korrekt aus. Aber offensichtlich funktioniert es nicht.
Dies ist wahrscheinlich die beste Lösung, die bisher vorgestellt wurde. Es kann noch mehr verkürzt werden. Wenn es dir nichts ausmacht würde ich in einer etwas optimierten Variante bearbeiten? – Tomalak
@Tomalak ok, fiel frei, um es zu optimieren (vielleicht fügen Sie die optimierte Version zum Ende in einem neuen 'Block' Code) – Francesco
Fühlen Sie sich frei, die verkürzte Version als Ihre eigenen zu nehmen, da es effektiv Ihre eigenen ist. – Tomalak