爬升并追加嵌套对象/数组

时间:2019-03-01 18:47:46

标签: javascript arrays object recursion traversal

我试图了解如何将分支结构递归地附加到对象上。

我试图将子代添加到一个空的JSON对象上,该对象在构建时应如下所示。

nodeStructure: {
    text: { name: "Parent node" },
    children: [
        {
            text: { name: "First child" },
            children: [
                {
                  text: {name: "Grandchild"}
                }
            ]
        },
        {
            text: { name: "Second child" }
        }
    ]
}

这是该代码最简洁的版本。

trackFraud = async (fraudID) => {

  var root = chart_config.nodeStructure = newNode(fraudID);

  await fraudClimb(root, 1);

  var my_chart = new Treant(chart_config);

  function newNode(node) { return {text:{name:"fraud " + node}}; }

  async function fraudClimb(root, fraudID) {    
    var frauds = await findFraudByFromID.call(this, fraudID); // returns an array of "integers"

    if (frauds.length == 0) return;

    var children = root.children = [];
    for (var i = 0; i < frauds.length; i++) {
      children.push(newNode(frauds[i]));
      fraudClimb(children[i], frauds[i]);
    }   
  }
}

现在,我试图围绕如何遍历或在此情况下附加到在数组和对象之间交替其他层次的结构

我想真正的问题是如何递归传递对象并将其附加到原始对象。

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到两个问题:

  1. fraudClimb的首次调用将忽略可用的fraudID参数。代替:

    await fraudClimb(root, 1);
    

    我认为您需要:

    await fraudClimb(root, fraudID);
    
  2. 尚未等待对fraudClimb的递归调用,但是在继续操作之前,您需要完成异步操作。所以改变这个:

    fraudClimb(children[i], frauds[i]);
    

    收件人:

    await fraudClimb(children[i], frauds[i]);