Javascript递归重置计数
我试图递归地计算JSON对象中“文件”的数量 这是我的功能Javascript递归重置计数,javascript,json,Javascript,Json,我试图递归地计算JSON对象中“文件”的数量 这是我的功能 function totalReports(object, count) { count = count || 0; var key; for(key in object) { if(typeof object[key] == 'object') { if(object[key].type == 'file') { count += 1;
function totalReports(object, count) {
count = count || 0;
var key;
for(key in object) {
if(typeof object[key] == 'object') {
if(object[key].type == 'file') {
count += 1;
console.log(count);
}
console.log("count");
totalReports(object[key], count);
}
}
return count;
}
这是JSON对象
jsonArray = {
"parent":{
"url":"parent.html",
"name":"Parent",
"children":[
{
"type":"folder",
"name":"Folder 1",
"url":"folder1.html",
"children":[
{
"type":"file",
"name":"File 1",
"url":"folder1-file1.html",
"children":[
]
},
{
"type":"file",
"name":"File 2",
"url":"folder1-file2.html",
"children":[
]
},
{
"type":"file",
"name":"File 2",
"url":"folder1-file3.html",
"children":[
]
}
]
},
{
"type":"folder",
"name":"Folder 2",
"url":"folder2.html",
"children":[
]
},
{
"type":"folder",
"name":"Folder 3",
"url":"folder3.html",
"children":[
{
"type":"file",
"name":"Folder3 File1",
"url":"folder3-file1",
"children":[
]
},
{
"type":"folder",
"name":"Folder3 Folder1",
"url":"folder3-file1",
"children":[
{
"type":"folder",
"name":"Folder3 Folder1 Folder1",
"url":"folder3-folder1-folder1",
"children":[
{
"type":"file",
"name":"Folder3 Folder1 Folder1 File1",
"url":"folder3-folder1-folder1-file1",
"children":[
]
},
{
"type":"file",
"name":"Folder3 Folder1 Folder1 File2",
"url":"folder3-folder1-folder1-file2",
"children":[
]
}
]
}
]
}
]
}
]
}
};
它被称为console.log(totalReports(jsonArray))
。它进入if循环的次数是正确的,但当它到达下一个子数组时,它不保持该值。这里的期望值是6,并且它进入if循环6次,但不确定当它出来时为什么要重置这些值
这是同样的小提琴
任何帮助都会很好。提前感谢。Count是一个数字,它是通过值传递的,而不是JavaScript中的引用。你需要做的是改变这一行
totalReports(object[key], count);
到
如果您不需要将
count
用于其他目的,那么我建议删除参数count
,只返回区域设置count
函数totalReports(对象){
var计数=0;
Object.keys(对象).forEach(函数(键){
if(对象[键]&&typeof对象[键]==“对象”){
如果(对象[键]。类型=='file'){
计数++;
}
计数+=总报告(对象[键]);
}
});
返回计数;
}
var jsonArray={“parent”:{“url”:“parent.html”,“name”:“parent”,“children”:[{“type”:“folder”,“name”:“folder 1”,“url”:“file”,“name”:“file”,“name”:“file 1”,“url”:“folder1-file1.html”,“children”:[]},{“type”:“file”,“name”:“file 2”,“url”:“folder1-file2.html”,“children”:[]},{“type”:“file”,“children:“文件2”,“url:”folder1-file3.html“,”子文件“:”[]}},{“类型”:“文件夹”,“名称”:“文件夹2”,“url:”folder2.html“,”子文件“,”[]},{“类型”:“文件”,“名称”:“folder3-File1”,“url:”folder3-File1“,”子文件“:[]},{“类型”:“文件夹”,“名称”:“folder3-folder1”,“url”:“folder3-file1”,“children”:[{“type”:“folder”,“name”:“folder3-Folder1 Folder1”,“url”:“folder3-Folder1-Folder1”,“children”:[{“type”:“file”,“name”:“file”,“name”:“folder3-Folder1-Folder1-file1”,“children”:[]},{“type”:“file”,“name”:“folder3-Folder1-Folder1-Folder1-File2”,“url”:“folder3-folder1-folder1-file2”,“子项”:[]}]}]}]}]},
计数=总报告数(jsonArray);
document.write(count);
count=totalReports(object[key],count)
@RomanHocke啊,明白了,谢谢:)你可以把它作为一个答案添加进去。对,而且也不需要传递count参数,这使得代码更可读。为了不传递count参数,他实际上需要写count+=totalReports(object[key],count);
,但是是的,它更整洁。
count= totalReports(object[key], count);