【发布时间】:2019-01-30 15:26:54
【问题描述】:
当我将可选的第二个参数传递给“listFiles”时,我遇到了困难。我正在努力找出如何列出给定子目录中的文件。列出数据描述的文件系统的给定目录中的文件。因此,您应该能够从数据中返回文件列表。
参数:
data {Object} - 如上所述的文件系统对象
dirName {String} - 想要列出文件的目录名。
注意:此参数是可选的。如果未提供,请列出所有文件。
Returns {Array}目录dirName下的文件,包括子目录。
完成这个练习的方法应该是使用递归。我能够使用以下代码从文件系统对象返回所有文件:
const fileData = {
dirName: 'app',
files: ['index.html'],
subDirs: [{
dirName: 'js',
files: [
'main.js',
'app.js',
'misc.js',
],
subDirs: [{
dirName: 'vendor',
files: [
'jquery.js',
'underscore.js',
],
subDirs: [],
}, ],
},
{
dirName: 'css',
files: [
'reset.css',
'main.css',
],
subDirs: [],
},
],
};
function listFiles(data, dirName) {
let result = [];
const traverseFileSystem = (obj) => {
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === 'object') {
if (key === 'files') {
result = [...result, ...obj[key]];
}
traverseFileSystem(obj[key]);
}
});
};
traverseFileSystem(data);
console.log(result);
}
listFiles(fileData, 'js');
【问题讨论】:
标签: javascript recursion traversal