【发布时间】:2018-10-22 15:45:36
【问题描述】:
每次调用 forEach 时,我都无法增加变量。
目标是通过将目录中所有文件的大小相加来获得目录的总大小。我遇到的问题是正确理解我应该把变量放在哪里,以便计算出正确的大小。
确实,目前计算的大小是单个文件的大小,而不是总大小。我错过了什么?
function walk(dir) {
let
n = 0,
size = 0,
totalSize = 0;
function walk(dir) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
totalSize += size; //Total size ; should it be here ?
++n;
console.log(size);
if (fs.lstatSync(fullPath).isDirectory()) {
--n;
walk(fullPath);
} else {
size = fs.statSync(fullPath).size; // Get size of file
listFiles.write(size + "\n"); // Write file size into copyList.xml
}
});
}
return walk(dir);
}
当前输出:
340747217
18607
283163346
25332
287107119
22240
281853153
219100996
204879388
210185951
26321
278784426
21899
22695
238503727
29866
266805926
21697
285134805
【问题讨论】:
-
那么哪一行应该对所有大小求和或将当前文件的大小添加到总和中?
-
我已经注释了上面的代码,很抱歉忘记了...
-
size = +size除了将变量size转换为数字之外,什么也不做。你的意思是size += size?即使这样,您稍后也会覆盖该值 - 您不能使用相同的变量同时保存当前大小和总大小。 -
更新了代码,是不是更好?
-
不多,因为
totalSize是一个局部变量,在每次迭代结束时都会丢失,而且无论如何您都不会对它做任何事情。
标签: javascript node.js foreach