使用JSON的递归Javascript
我的目标不是跟踪递归调用发生的次数,而是跟踪JSON中的深度级别。我正在尝试使用递归创建具有适当缩进的HTML表。但是,我无法看到我处于什么级别,以确定相对于父元素正确“缩进”子元素的位置 我的结构如下:使用JSON的递归Javascript,javascript,json,recursion,Javascript,Json,Recursion,我的目标不是跟踪递归调用发生的次数,而是跟踪JSON中的深度级别。我正在尝试使用递归创建具有适当缩进的HTML表。但是,我无法看到我处于什么级别,以确定相对于父元素正确“缩进”子元素的位置 我的结构如下: { "SMINFOREC":{ "TSUTC":{ "@attributes":{ "hex":"404211D8", "intermediate":"1078071768", "uom
{
"SMINFOREC":{
"TSUTC":{
"@attributes":{
"hex":"404211D8",
"intermediate":"1078071768",
"uom":""
},
"#text":"2014-03-05T16:22:48Z"
},
"Trig":{
"@attributes":{
"hex":"0003",
"intermediate":"3",
"uom":""
},
"#text":"3"
},
"GID":{
"@attributes":{
"hex":"0C90",
"intermediate":"3216",
"uom":""
},
"DLID":{
"#text":"12"
},
"MLID":{
"#text":"144"
}
},
"TOH":{
"@attributes":{
"hex":"0005540F",
"intermediate":"349199",
"uom":"hours"
},
"#text":"96.999799822"
}
}
}
我想递归地迭代这个,并且知道我目前处理的级别的深度。我已经在这个级别上做了很长时间了,但是无法正确计算深度。有什么想法吗
编辑****
function iterate(obj,callback){
for (key in obj){
if(typeof obj[key] === 'object' && key !== "hex" && key !== "intermediate")
{
console.log("**********************************************");
console.log("key: " + key);
console.log("obj[key]: " + obj[key]);
console.log("level inside iterate callback: " + level);
console.log("**********************************************");
iterate(obj[key],callback);
}
else if(key !="uom")
{
console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
console.log("key: " + key);
console.log("obj[key]: " + obj[key]);
console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
callback(obj[key]);
}
}
console.log("level: " + level);
}
iterate(jsonData[namespace].Data, function(obj){
level++;
console.log("---------------------------------------------");
console.log(obj);
console.log("level inside iterate: " + level);
console.log("---------------------------------------------");
});
我觉得很慷慨
var maxDepth = 0;
function traverse(node, depth) {
maxDepth = Math.max(maxDepth, depth);
//...do something with the data in the node if you want...
//process children, if any
for (var i in node) {
traverse(node[i], depth+1);
}
}
traverse(your-json);
您可以尝试以下操作:
function iterate(obj,callback){
for (key in obj){
if(typeof obj[key] === 'object')
iterate(obj[key],callback);
else callback(obj[key]);
}
}
iterate(jsn, function(obj){
console.log(obj);
});
如果需要计算深度,请在每次调用迭代函数时增加一些变量。
函数递归(foo,depth){recurse(otherfoo,depth+1);}
,基本上您尝试了哪些当前不起作用的方法?请参见上文。我已添加到描述中。谢谢。我更新了代码,增加了我要做的事情。我已经走了好几次这条路线,但是我在上面添加了一些描述,说明了我试图实现的目标。我用我想做的事情更新了代码。我已经走这条路线好几次了,但我在上面添加了一些描述,我正试图实现感谢