Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中反向求和数组中的文件数?_Javascript_Arrays_Recursion - Fatal编程技术网

如何在JavaScript中反向求和数组中的文件数?

如何在JavaScript中反向求和数组中的文件数?,javascript,arrays,recursion,Javascript,Arrays,Recursion,在我的代码中,我想修改我的数组,使其具有每个级别上所有子文件的总和。 我首先创建了一个递归函数来遍历树 const数据=[ { foldername:“folder1”, 文件数量:123, 儿童:[ { foldername:“folder1.1”, 文件数量:3, 儿童:[], }, { foldername:“folder1.2”, 文件数量:5, 儿童:[ { foldername:“folder1.2.1”, 文件数量:20, 儿童:[], }, ], }, ], }, { fold

在我的代码中,我想修改我的数组,使其具有每个级别上所有子文件的总和。 我首先创建了一个递归函数来遍历树

const数据=[
{
foldername:“folder1”,
文件数量:123,
儿童:[
{
foldername:“folder1.1”,
文件数量:3,
儿童:[],
},
{
foldername:“folder1.2”,
文件数量:5,
儿童:[
{
foldername:“folder1.2.1”,
文件数量:20,
儿童:[],
},
],
},
],
},
{
foldername:“folder2”,
文件数量:1,
儿童:[
{
foldername:“folder2.1”,
文件数量:3,
儿童:[
{
foldername:“folder2.1.1”,
文件数量:2,
儿童:[
{
foldername:“folder2.1.1.1”,
文件数量:24,
儿童:[],
},
],
},
],
},
{
foldername:“folder2.2”,
文件数量:5,
儿童:[],
},
],
},
];
常量记录=(输入)=>{
input.forEach((e)=>{
console.log(e.foldername,e.amount\u文件);
如果(e.children.length>0){
rec(如儿童);
}否则{
//我到达了一根树枝的死亡点。
//现在我需要开始骑自行车回去
}
})
}

rec(数据)
您可以使用
.map
而不是
.forEach
,这样您就可以得到一个新数组,然后用新对象填充该数组

请注意,示例输出中存在求和错误,因为包含5项的最终文件夹未累计到父计数中(因此应为34而不是29):

const recur=(输入)=>input.map(节点=>{
让子对象=重复出现(node.children);
让sum\u children\u files=children.reduce((sum,child)=>
sum+child.sum\u子文件+child.amount\u子文件
, 0);
返回{…节点,子节点,和子文件};
});
const data=[{foldername:“folder1”,文件数量:123,子项:[{foldername:“folder1.1”,文件数量:3,子项:[],},{foldername:“folder1.2”,文件数量:5,子项:[{foldername:“folder1.2.1”,文件数量:20,子项:[],},},{foldername:“folder2”,文件数量:1,子项:[{foldername:“folder2.1”,文件夹数量:3,子文件夹:[{foldername:“folder2.1.1”,文件夹数量:2,子文件夹:[{foldername:“folder2.1.1.1”,文件夹数量:24,子文件夹:[],},],},},{foldername:“folder2.2”,文件夹数量:5,子文件夹:[],},},},];
常数结果=重现(数据);

控制台日志(结果)谢谢。你说得对。我也更新了代码。你知道
return
语句是如何工作的吗?我想是的。你问是因为我什么都不退吗?