私はこのような木き:このツリーのツリー内の子ノードへのパスを計算する方法は?
var tree = [
{
type: "folder",
children: [
{
type: "folder",
children: [
{
type: "document",
id: 1,
children: []
}
]
}
]
},
{
type: "folder",
children: []
}
];
葉は常に空children
の配列を持っています。
インデックスのパスを与えられた条件を満たすノードに返す関数を構築する必要があります。
getPathToNode(tree, function (node) {
return node.type === "document" && node.id === 1;
})
し、以下を返します:
[0, 0, 0]
そのノードへのパスを記述する:
tree[0].children[0].children[0]
この再帰関数は、私が得たものである機能は、このように呼ばれますこれまで:
function getPathToNode(tree, fn) {
return tree.reduce(function (path, node, i) {
if (fn(node)) {
return path.concat(i);
}
if (node.children.length > 0) {
const pathToNode = getPathToNode(node.children, fn);
return pathToNode.length > 0 ? path.concat(i, pathToNode) : [];
}
return [];
}, []);
}
私は関数が通過中にパスを構築する必要があると思います。ノードを見つけずにリーフに到達すると、ノードが見つからなかったブランチに属するそのパスの部分だけを削除し、他のブランチ。
あなたは再帰を使用して/学習しようとしたことがありますか? – gyre
これまでに試したことを含めて私の質問を編集しました。はい、これは間違いなく私が通常管理していた再帰の仕事ですが、この作業は私にとってははるかに困難です。 – silvenon