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 ok、それを最適化するために自由に落ちました(新しい 'block'コードの末尾に最適化されたバージョンを追加してください) – Francesco
あなた自身のものであるので、短縮バージョンを自分のものとして自由に使うことができます。 – Tomalak