javascript - fs.readdir 首先同步目录

标签 javascript node.js sorting

我想从我的系统中读取一个目录。目录结构为

dir

我用这段代码读取了目录

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.readdirfs.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/

相关文章:

JavaScript 计数错误

node.js - 为什么我的容器继续构建同一层?

javascript - Node.js 中的变量作用域

algorithm - 这里使用了哪种排序算法

javascript - react : How to show Error Message if no data is found in obj

javascript - 如何使用 react-big-calendar 的 slotPropGetter 为特定日期和特定时间着色?

node.js - Azure Functions NodeJS Express 应用程序抛出无法确定函数入口点错误

php - 使用php通过前端重新排序数据库记录行

javascript - 如何重载比较器以使用 UTF-8 和不同的语言环境进行排序

javascript - 通过//请求时无法检索js文件?