[英]Appending nodes to a nested Javascript Object in recursive manner
我有一个嵌套的javascript对象,可用作图形。 我图中的每个节点都有一个静态结构。 每个节点都有两种类型的子节点true/false
。 而且他们可以有许多与其关联的子节点(不是二叉树)。
var directedGraph = {
"sms_in": {
"metaType": "",
"data": {"parents": [], "args": {"values": {}, "keys": []}, "return": ["message", "address"]},
"true": {
"A": {
"metaType": "",
"data": {"parents": [], "args": {"values": {}, "keys": []}, "return": ["message", "address"]},
"true": {
"C": {
"metaType": "",
"data": {
"parents": [],
"args": {"values": {}, "keys": []},
"return": ["message", "address"]
},
"true": {},
"false": {},
"prototype": {}
}
},
"false": {
"B": {
"metaType": "",
"data": {
"parents": [],
"args": {"values": {}, "keys": []},
"return": ["message", "address"]
},
"true": {},
"false": {},
"prototype": {}
}
},
"prototype": {}
}
},
"false": {},
"prototype": {}
}
};
在我的实际程序中,每当我在html
页面中绘制一个div
,我都会为该div创建一个节点。 将以动态方式生成ID(在上面的示例中,我使用了A,B,C)。
这就是为什么我需要一种以递归方式将节点添加到图中的原因。
var pushNodeById = function (parentId, bool, childId, childNode) {
for(key in directedGraph){
if(key == parentId){
directedGraph[parentId][bool][childId] = childNode;
}else{
//make the recursive call
}
}
};
谁能帮我完成以上功能?
以下功能可用于创建每个节点
var mapIds = {};
function Node(obj){
$.extend(this,obj);
this.true = {};
this.false = {};
this.addChild = function(id,prop,obj){
var temp = new Node(obj);
mapIds[id] = temp;
this[prop][id] = temp;
return temp;
}
this.addTrue=function(id,obj){
return this.addChild(id,"true",obj)
}
this.addFalse=function(id,obj){
return this.addChild(id,"false",obj)
}
this.getById = function(id){
return mapIds[id];
}
}
现在动态创建树更加容易
var tempObj = {whatever:{}};
var tree = new Node(tempObj);
var A = tree.addTrue("A",tempObj)
A
.addTrue("B",tempObj)
.addTrue("G",tempObj);
A
.addTrue("C",tempObj);
var D = A.addTrue("D",tempObj);
D.addFalse("F",tempObj);
D.addTrue("E",tempObj);
//Now Add to C -->False -> H,I, K
var C = tree.getById("C");
C.addFalse("H",tempObj)
C.addFalse("I",tempObj)
C.addFalse("K",tempObj)
JSON.stringify(tree);
您可以使用getById将孩子添加到每个节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.