【发布时间】:2017-09-12 08:47:16
【问题描述】:
我一直在研究一个函数,该函数将采用相对目录名称,递归遍历目录及其所有子目录,并创建包括文件在内的整个结构的数组。
我从这里完成的工作开始: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'));
于 2017 年 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'));
【问题讨论】:
标签: javascript arrays node.js functional-programming