我有一個用JavaScript編寫的應用程序。在這個應用程序中,我有一個JavaScript對象樹。示例樹和下面的代碼可以在JSFiddle中看到。JavaScript - 遞歸查找父節點
我想寫一個函數,它會返回一個ID爲祖先的列表。具有特定ID的元素的祖先。目前,我有以下內容:
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;
}
它始終返回第一個父級。但是,它不會返回所有的祖先。例如,在JSFiddle中,我試圖按照該順序獲取包含[201,2]的數組。我不確定我做錯了什麼。我一直盯着這看起來是正確的。但是,顯然,這不起作用。
這可能是迄今爲止提出的最佳解決方案。它可以縮短更多。如果你不介意我會在一個稍微優化的變體中進行編輯? – Tomalak
@Tomalak好的,可以自由地優化它(也許在一個新的「塊」代碼中添加優化版本到最後) – Francesco
隨意將縮短版本作爲你自己的版本,因爲它實際上是你自己的。 – Tomalak