代码之家  ›  专栏  ›  技术社区  ›  0TTT0

爬升并附加嵌套对象/阵列

  •  0
  • 0TTT0  · 技术社区  · 7 年前

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

    我试图将子对象附加到一个空的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]);
        }   
      }
    }
    

    现在,我正试图了解如何遍历,或者在本例中附加到一个在数组和对象之间每隔一层交替的结构

    我想真正的问题是如何递归地传递一个对象,并附加到原始对象上。

    0 回复  |  直到 7 年前
        1
  •  1
  •   trincot    7 年前

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

    1. 第一次打电话给 fraudClimb 忽略 fraudID 可用的参数。而不是:

      await fraudClimb(root, 1);
      

      我认为你需要:

      await fraudClimb(root, fraudID);
      
    2. 递归调用 诈骗犯 没有等待,但在继续之前需要完成异步操作。所以改变这个:

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

      致:

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