我有一个用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