javascript - 爬升并附加嵌套对象/数组

标签 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. 第一次调用 fraudClimb 会忽略可用的 fraudID 参数。而不是:

    await fraudClimb(root, 1);
    

    我认为你需要:

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

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

    至:

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

关于javascript - 爬升并附加嵌套对象/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950587/

相关文章:

javascript - JAX RS - Jersey 文件传输,响应不应重定向

python - 将函数应用于 3d numpy 数组切片的最佳方法

Java合并相邻的数组元素以产生最大最小值

javascript - 将对象转换为包含对象作为元素 0 的数组

javascript - 为什么等待和异步有效的变量名?

javascript - 如何使用 JavaScript 从 Parse.com 类中的对象获取信息

javascript - 真正具有特定类别的下一个元素

arrays - 如何将嵌套数组转换为平面数组?

c++ - 非STL函数对象回调使用

Javascript - 根据键字符串从对象动态获取子值