Javascript Recursion:如何访问子节点的父访问实例

时间:2016-09-14 07:51:02

标签: javascript recursion

我试图构建逻辑以访问我当前通过递归访问的子节点的所有父节点,但是不能这样做。这是我到目前为止所做的:

这是我的阵列:

y

现在我的逻辑是迭代:

var results = [{
  "key": 1,
  "name": "A",
  "child": [{
    "key": 2,
    "name": "A1",
    "child": [{
      "key": 1473591350189,
      "name": "A11"
    }]
  }, {
    "key": 10,
    "name": "A2",
    "child": []
  }]
}, {
  "key": 66,
  "name": "B",
  "child": [{
    "key": 67,
    "name": "B1",
    "child": [{
      "key": 68,
      "name": "B11",
      "child": [{
        "key": 69,
        "name": "B111",
        "child": []
      }]
    }]
  }]
}];

我在这里找到当前孩子的直系亲,但我如何才能接触到该孩子的所有父母。例如,如果关系是: A - > A1 - > A11 那么如何才能访问 A11 的所有家长?在此先感谢!!

2 个答案:

答案 0 :(得分:0)

走私父母最好是循环而不是递归。 走遍层次结构中的所有节点(可以说)使用递归比在循环中更好。

我建议这样走路的父母

function navParents(node)
{
    if(!node)
       return;
    while(node != null) {
       /* do something with node here */
       node = node.parent;
    }
}

答案 1 :(得分:0)

您可以使用迭代递归方法来搜索所需节点的父节点,该节点在回调中定义。

此提案使用Array#some,因为如果找到某个节点,则可以针对此级别停止迭代。

结果数组包含从根到最终节点的所有父节点。



function getParentNodes(tree, callback) {
    var nodes = [];
    tree.some(function iter(a) {
        if (callback(a) || Array.isArray(a.child) && a.child.some(iter)) {
            nodes.unshift(a);
            return true;
        }
    });
    return nodes;
}

var results = [{ key: 1, name: "A", child: [{ key: 2, name: "A1", child: [{ key: 1473591350189, name: "A11" }] }, { key: 10, name: "A2", child: [] }] }, { key: 66, name: "B", child: [{ key: 67, name: "B1", child: [{ key: 68, name: "B11", child: [{ key: 69, name: "B111", child: [] }] }] }] }];

console.log(getParentNodes(results, function (o) { return o.name === 'A11'; }));

.as-console-wrapper { max-height: 100% !important; top: 0; }