从具有指定文件夹名称的文件夹结构中获取文件名
Get the filenames from the folder structure with a specified folder name
我正试图解决一个类似的问题,并遇到问题。Javascript递归在遍历整个树之前就完成了?
我有相同的函数listFiles,但有两个参数。第二个参数是传递给此函数的文件夹名称。该函数应该返回在传递的文件夹名下的文件名。如。如果传递的文件夹名称是'js',那么函数应该返回5个文件,即- main.js', 'app.js', 'misc.js', 'jquery.js'和'underscore.js'。这是我试图写的代码,以实现结果-
function listSubfolder(fileSystem, subFolder){
var result = [];
for(var i=0; i<fileSystem.files.length; i++){
if(typeof fileSystem.files[i] !== 'string') {
fileSystem = fileSystem.files[i];
findFiles(fileSystem);
}
}
function findFiles(fileSystem) {
var files = fileSystem.files;
if (typeof files !== 'undefined') {
for (var i = 0; i < files.length; i++) {
if (typeof files[i] === 'string') {
result.push(files[i]);
} else {
findFiles(files[i]);
}
}
}
}
return result;
}
这里有几个问题。首先是范围。
将参数fileSystem
传递给函数(L1):
function listSubfolder(fileSystem, subFolder){
但是你在函数(L5)中重新定义它:
fileSystem = fileSystem.files[i];
同样的事情也发生在您的findFiles
函数(L10)上。您再次指定fileSystem
(这不会从listSubFolder
中破坏原始fileSystem
对象,但将来可能会导致错误),所以我也会重命名该参数。
现在第二个问题是你需要检查文件是否来自指定的子文件夹(L4):
if(typeof fileSystem.files[i] !== 'string' && fileSystem.files[i].dir === subFolder) {
最终的编辑应该是这样的:
function listSubfolder(fileSystem, subFolder){
var result = [],
fArr;
for(var i=0; i<fileSystem.files.length; i++){
if(typeof fileSystem.files[i] !== 'string' && fileSystem.files[i].dir === subFolder) {
fArr = fileSystem.files[i];
findFiles(fArr);
}
}
function findFiles(f) {
var files = f.files;
if (typeof files !== 'undefined') {
for (var i = 0; i < files.length; i++) {
if (typeof files[i] === 'string') {
result.push(files[i]);
} else {
findFiles(files[i]);
}
}
}
}
return result;
}
您提供的代码的主要问题是,您没有检查当前文件夹,看看您是否在subFolder
内。您可以向findFiles
方法添加一个额外的布尔参数,该方法跟踪您是否在指定的子文件夹中。只有在这种情况下,才应该将文件添加到result
。
在您的第一个循环中也有一个bug,您在每次循环中都更改fileSystem。你可以删除这个循环,让findFiles像处理其他目录一样处理根目录。
function listSubfolder(fileSystem, subFolder){
var result = [];
function findFiles(fileSystem, inSubFolder) {
var files = fileSystem.files;
if (typeof files !== 'undefined') {
for (var i = 0; i < files.length; i++) {
if (typeof files[i] === 'string') {
if (inSubFolder) {
result.push(files[i]);
}
} else {
var currentInSubFolder = (files[i].dir === subFolder);
findFiles(files[i], inSubFolder || currentInSubFolder);
}
}
}
}
findFiles(fileSystem, false);
return result;
}
- 使用angularjs和node.js时的Web应用程序文件夹结构
- Dropzone.js-上传文件夹结构和单个文件
- 更改文件夹结构时未运行排行榜示例
- Meteor收集文件夹结构
- 如何在node.js中组织文件夹结构
- 更改sails.js中的配置文件夹结构
- 使用 webpack 在输出目录中保留文件夹结构
- 如何在文件夹结构中获取.json文件
- Javascript:列出文件和文件夹结构
- 道场树中新文件夹结构中的问题
- Extjs MVC 文件夹结构无法加载文件
- 根据路径字符串构建嵌套文件夹结构
- 从视图源下载html的简单方法,同时保留文件夹结构
- 在将haml文件转换为html时复制整个文件夹结构(使用grunt)
- React JS和Meteor JS文件夹结构
- 从具有指定文件夹名称的文件夹结构中获取文件名
- 网页浏览动态文件夹结构
- AngularJS + Gulp文件和文件夹结构和正确的gulfull .js配置
- 组织Javascript库的最佳实践CSS文件夹结构
- Jquery文件夹结构