Javascript递归重置计数

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;

我试图递归地计算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;
             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);