我一直在努力的功能,将采取相对目录名称,递归迭代通过该目录及其所有子目录,并创建一个整个结构的数组,包括文件。净化函数来创建/从文件目录结构阵列
我开始在这里所做的工作:https://gist.github.com/kethinov/6658166
我开发一个独立的应用程序,并可以利用ES6/ES7的。
以下代码有效。但是,我的主要目标是提高编码技能,所以我想知道是否有更好的方法?更高效?更多功能?
我知道我可以直接将命名函数移动到.map中并使用箭头函数,但是我应该如何处理?在这种情况下,我没有真正返回任何东西,因此使用更简洁的语法不太清楚?我没有明确返回并利用这种回报,而是依赖副作用(?)的事实并非功能性的。
const fs = require('fs');
const path = require('path');
function walkSync(dir, array = []) {
function _process(collectionElement) {
const nextJoin = path.join(dir, collectionElement);
array.push(nextJoin.replace(/\\/g, '/'));
if (fs.statSync(nextJoin).isDirectory()) {
walkSync(nextJoin, array);
}
}
fs.readdirSync(dir).map(_process);
return array;
}
console.log(walkSync('directory'));
编辑17年4月23日
所以我相信下面是更多的功能和“素净”。不知道我还能做得更好吗?
const fs = require('fs');
const path = require('path');
// Builds an array of all directories and files
function processDirectory(content, directory, array) {
const item = path.join(directory, content);
// reformat for Windows environment
array.push(item.replace(/\\/g, '/'));
if (fs.statSync(item).isDirectory()) {
// eslint-disable-next-line no-use-before-define
return walkDirectorySync(item, array);
}
return array;
}
function walkDirectorySync(directory, array = []) {
// node reads the directory SYNCHRONOUSLY (maintains order & BLOCKS)
fs.readdirSync(directory).map(content => processDirectory(content, directory, array));
return array;
}
console.log(walkDirectorySync('world'));