我一直在努力的功能,將採取相對目錄名稱,遞歸迭代通過該目錄及其所有子目錄,並創建一個整個結構的數組,包括文件。淨化函數來創建/從文件目錄結構陣列
我開始在這裏所做的工作: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'));