JavaScript中的JSON递归树

JavaScript中的JSON递归树,javascript,json,recursion,Javascript,Json,Recursion,我需要一些JavaScript代码方面的帮助。 我的目标是写一个程序,可以生成一个巨大的二叉树 在编译之前,我指定我想要的树的级别,假设 除最后一级外,每个对象都有两个子对象 标高=3的简单可视化: 每个对象都有: -名称-shema中的第一个字段。还应包括有关对象编号的信息 -键入-shema中的第二个字段。有关对象深度的信息 -属性-有关对象的一些静态信息。在我的情况下,情况是一样的,如下所示 -孩子们 我编写了一些代码,精确地从模式中复制了树: var levels = 3; //2^0

我需要一些JavaScript代码方面的帮助。 我的目标是写一个程序,可以生成一个巨大的二叉树

在编译之前,我指定我想要的树的级别,假设 除最后一级外,每个对象都有两个子对象

标高=3的简单可视化:

每个对象都有:

-名称-shema中的第一个字段。还应包括有关对象编号的信息

-键入-shema中的第二个字段。有关对象深度的信息

-属性-有关对象的一些静态信息。在我的情况下,情况是一样的,如下所示

-孩子们

我编写了一些代码,精确地从模式中复制了树:

var levels = 3; //2^0, 2^1, 2^2
var level_description = [];

for (var i = 0; i < levels; i++) {
    obj = {};
    obj.level = i;
    obj.amount = Math.pow(2, i);
    obj.indexes = [];
    if (i === 0) {
        obj.indexes[0] = 0;
        level_description.push(obj);
    } else {
        for (var j = 0; j < obj.amount; j++) {
            obj.indexes[j] = obj.amount + j - 1;
        }
        level_description.push(obj);
    }
}

console.log(level_description);

var properties = [{
    "name": "trend",
    "value": "true"
}, {
    "name": "unit",
    "value": "g"
}];

var jsonString = JSON.stringify([{
    "name": "Object_" + level_description[0].indexes[0].toString(), //Object_0
    "type": "level_" + level_description[0].level.toString(), //level_0,
    "properties": properties,
    "children": [{
        "name": "Object_" + level_description[1].indexes[0].toString(), //Object_1
        "type": "level_"  + level_description[1].level.toString(), //level_1,
        "properties": properties,
        "children": [{
            "name": "Object_" + level_description[2].indexes[0].toString(), //Object_3
            "type": "level_" + level_description[2].level.toString(), //level_2,
            "properties": properties,
            "children": []
        }, {
            "name": "Object_" + level_description[2].indexes[1].toString(), //Object_4
            "type": "level_" + level_description[2].level.toString(), //level_2,
            "properties": properties,
            "children": []
        }]
    }, {
        "name": "Object_" + level_description[1].indexes[1].toString(), //Object_2
        "type": "level_" + level_description[1].level.toString(), //level_1,
        "properties": properties,
        "children": [{
            "name": "Object_" + level_description[2].indexes[2].toString(), //Object_5
            "type": "level_" + level_description[2].level.toString(), //level_2,
            "properties": properties,
            "children": []
        }, {
            "name": "Object_" + level_description[2].indexes[3].toString(), //Object_6
            "type": "level_" + level_description[2].level.toString(), //level_2,
            "properties": properties,
            "children": []
        }]
    }]
}]);

pm.globals.set('jsonString', jsonString);
但现在我被卡住了。我很难使它具有递归性和灵活性

我在我的谷歌光盘上上传了一个输出json树:

谢谢你的帮助

递归树节点发生器 我并不特别喜欢这个实现,因为它没有保持树节点编号系统的广度优先,因为递归函数本质上是深度优先的,所以一个更简单、可能更好的实现是运行两个for循环,一个用于迭代每个级别,另一个用于级别所需的节点。尽管如此,下面是递归代码:

函数TreeNodename、级别、属性、子级{ this.name=名称; 这个水平=水平; 这个。属性=属性; 这个。孩子=孩子; } 风险值水平=3//2^0, 2^1, 2^2 var-tree=newtreeNodeRoot,0,{},[]; var指数=0; 函数生成器Bitrarylevelsparent,levelsMaining{ //末级 IFlevelsMaining==0返回; var currentLevel=parent.level+1; 父、子、推 新的TreeNodeObject_u+tempIndex++,currentLevel,{},[] ; generateArbitraryLevelsparent.children[0],levelsMaining-1; 父、子、推 新的TreeNodeObject_u+tempIndex++,currentLevel,{},[] ; generateArbitraryLevelsparent.children[1],levelsMaining-1; } generateArbitraryLevelstree,级别;
logtree 递归树示例:

函数makeTreeniv,max{ 如果max==未定义{ 最大值=niv; } 设obj={ 名称:`n${max-niv}`, 儿童:[] }; 如果niv<1{ 返回obj; } 设c1=makeTreeniv-1,最大值; obj.childrens.pushc1; 设c2=makeTreeniv-1,最大值; obj.childrens.pushc2; 返回obj; }
console.logmakeTree4 我建议这样做:

var cnt = -1;
var properties = {"prop1":"a","prop2":"b"};
var MAX_LEVELS = 3;

function addNode(parent, level){
  cnt = cnt + 1;
  var node = {
    "name": "Object_" + cnt,
    "type": "level_"  + level,
    "properties": properties,
    "children": []
  };

  if (level < MAX_LEVELS){
    addNode(node, level + 1);
    addNode(node, level + 1);
  }

  if (parent){
    parent.children.push(node);
  }
  else {
    return node;
  }
}
let result = addNode(null, 0);
console.log(JSON.stringify(result, null, 4))

你的方法比我的更清楚。谢谢你,但我不是那个意思。我想添加下一层的对象,而不是用五个替换一个。例如:To 3加7和8,To 4加9和10等等。根据名为levelsOkay的变量的值,我想我误解了您试图进行递归的内容,我将使用递归更新我的答案generator@MuscleUpUp我已经更新了我的答案,看看你还需要什么