我想从我的系统中读取一个目录。目录结构为
我用这段代码读取了目录
const directoryLevelInfo = fs.readdirSync('data', 'utf8')
.map(item => {
const path = `data/${item}`;
const isDir = fs.lstatSync(path)
.isDirectory();
return {
name: item,
path: path,
isDir: isDir
};
});
我得到的结果是
[ { name: 'FileOne.md', path: 'data/FileOne.md', isDir: false },
{ name: 'FolderOne', path: 'data/FolderOne', isDir: true },
{ name: 'FolderTwo', path: 'data/FolderTwo', isDir: true } ]
如您所见,首先是文件,然后是文件夹。正确的顺序是订单在前,文件在后。
我是遗漏了什么还是必须使用
Array.sort()
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
正确地排序这个结构?你会如何排序,因为你必须检查当前项目是文件还是目录,如果你比较两个相同类型的项目,你也必须按字母顺序排序。
编辑:
我的排序函数是
.sort((a, b) => {
if (!a.isDir && b.isDir) {
return 1;
}
if (a.isDir && !b.isDir) {
return -1;
}
if (a.isDir && b.isDir || !a.isDir && !b.isDir) {
return 0;
}
});
也许对此有一些改进。
最佳答案
Node.js fs.readdir
和 fs.readdirSync
函数的行为 inconsistently在排序方面,它们在 Windows 和 *nix 上也有所不同。如果您需要持久的行为,那么最好的选择似乎是在映射之后进行排序。
假设你想按字母顺序对目录和文件进行排序,你可以使用下面的代码。
const directoryLevelInfo = fs
.readdirSync("documentation", "utf8")
.map(item => {
const path = `documentation/${item}`;
const isDir = fs.lstatSync(path).isDirectory();
return {
name: item,
path: path,
isDir: isDir
};
})
.sort((a, b) => b.isDir - a.isDir || a.name > b.name ? 1 : -1);
关于javascript - fs.readdir 首先同步目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873994/