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