Javascript 如何创建和调用要在方法中调用的对象
在下面的代码中,我遍历了所有目录和扩展名为“js”的任何文件,并将其添加到“files_2;”数组中。 我还想做的是,创建一个对象或方法“Accumeratedata”,它将在每次调用“files.push”时更新。因此,对于每一次迭代 “files_uu.push”称为“累计数据”,其中包含“files_uu.push”的最新/更新内容以及总大小 此外,我希望下面的方法返回“Accumeratedata”,以便在方法“getFiles”完成迭代后,我可以调用如下内容:Javascript 如何创建和调用要在方法中调用的对象,javascript,Javascript,在下面的代码中,我遍历了所有目录和扩展名为“js”的任何文件,并将其添加到“files_2;”数组中。 我还想做的是,创建一个对象或方法“Accumeratedata”,它将在每次调用“files.push”时更新。因此,对于每一次迭代 “files_uu.push”称为“累计数据”,其中包含“files_uu.push”的最新/更新内容以及总大小 此外,我希望下面的方法返回“Accumeratedata”,以便在方法“getFiles”完成迭代后,我可以调用如下内容: console.log(
console.log(accumulateData.totalSize)
请让我知道如何做到这一点
代码:
function getFiles(dir, files_) {
files_ = files_ || [];
var files = fs.readdirSync(dir);
for (var i in files) {
var name = dir + '/' + files[i];
if (fs.statSync(name).isDirectory()) {
getFiles(name, files_);
} else if (name.endsWith('js')) {
//totalSize += fs.statSync(name).size;
files_.push({ name: name, size: fs.statSync(name).size });
/*accumulateData(files, totalSize)
{
files = files;
totoalSize = totalSize;
}*/
}
}
return files_;
//return accumulateData
}
我的尝试
let totalSize = 0;
let accumulatedData;
function getFiles(dir, files_) {
files_ = files_ || [];
const files = fs.readdirSync(dir);
for (const i in files) {
const name = dir + '/' + files[i];
if (fs.statSync(name).isDirectory()) {
getFiles(name, files_);
} else if (name.endsWith('js')) {
// files_.push(name);
totalSize += fs.statSync(name).size;
files_.push({ name: name, size: fs.statSync(name).size });
// data(files, totalSize);
accumulatedData = {
files: files,
totalSize: totalSize
};
}
}
return accumulatedData;
}
console.log(getFiles('/home/bakria/Projects/smartvehicle').totalSize);
可以使用同时包含文件数组和总大小的对象:
function getFiles(dir, obj) {
obj = obj || { files: [], totalSize: 0 }; // if no object is provided then initialize obj with an object that contains an empty array for files and 0 for totalSize
var files = fs.readdirSync(dir);
for(var i = 0; i < files.length; i++) {
var name = dir + '/' + files[i];
var stat = fs.statSync(name); // to minimize the calls to fs.statSync
if (stat.isDirectory()) {
getFiles(name, obj); // pass obj to getFile (recursion)
} else if (name.endsWith('js')) {
obj.totalSize += stat.size; // add this file's size to obj.totalSize
obj.files.push({ name: name, size: stat.size }); // push this file's object into obj.files
}
}
return obj; // return obj
}
其中,结果
为:
{
files: [/* an array of files */],
totalSize: /* total size of the files */
}
因此,
result.files
将是文件数组,result.totalSize
将是总大小。为什么不将它推到另一个数组中?另一个数组将包含最近/更新的“files.push”内容和totalsize。当您需要对JS文件集合执行其他操作时,会发生什么情况?或者所有图像或音频文件都需要totalSize
?有一个函数可以遍历文件/目录,并收集作为参数传入的fileExtension
的所有文件。具有单独的函数来对结果集合执行操作或获取有关结果集合的数据。计算集合中所有文件的总大小本身就是一项任务,如果您将其分离出来,则可能会变得更通用。请检查我在“我的尝试”中发布的代码,好吗节???@LetsamrIt您的尝试使对象累计数据
和总大小
gloabal,这不是一件好事,因为您必须在每次调用getFiles
之前初始化它们。我的负责,你不需要自己去做。
{
files: [/* an array of files */],
totalSize: /* total size of the files */
}