爬上并附加嵌套对象/数组

问题描述 投票:0回答:1

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

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

现在我试图围绕如何遍历,或者在这种情况下附加到一个结构,该结构交替在数组和对象之间的每个其他级别

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

javascript arrays object recursion traversal
1个回答
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]);
© www.soinside.com 2019 - 2024. All rights reserved.