假设我有这样的目录结构:
root
|_ .git
|_ .sass-cache
|_ css
| |_ scss
| | |_ modules
| | | |_ a-module.scss
| | | |_ ...
| | |_ partials
| | | |_ a-partial.scss
| | | |_ ...
| | |_ main.scss
| |_ main.css
| |_ main.css.map
...
|_ .bowerrc
|_ .gitignore
|_ app.js
|_ bower.json
|_ Gruntfile.js
|_ index.html
|_ package.json
|_ README.md
我正在使用以下代码生成此结构的JSON,但它还没有维护我想要的顺序,如上所示,文件夹位于列表顶部(按字母顺序排列),文件正在位于列表底部(也按字母顺序排列)。
var fs = require('fs');
var path = require('path');
function getTree(filepath) {
filepath = path.normalize(filepath);
var stats = fs.lstatSync(filepath);
var info = {
path: filepath,
name: path.basename(filepath)
};
if (stats.isDirectory()) {
info.type = "directory";
info.children = fs.readdirSync(filepath).map(function(child) {
return getTree(path.join(filepath, child));
});
} else {
info.type = "file";
}
return info;
}
exports.getTree = getTree;
(从this回复修改)
以下列格式吐出JSON:
{
path: '/absolute/path/to/directory',
name: 'name-of-dir',
type: 'directory',
children:
[
{
path: '/absolute/path/to/file',
name: 'name-of-file',
type: 'file',
},
{
path: '/absolute/path/to/directory',
name: 'name-of-dir',
type: 'directory',
children:
[
{
...
}
]
}
]
}
我想知道如何最好地改变现有代码以对children
数组进行排序以复制目录结构顺序。检查应使用name
和type
属性来确定其在结果JSON中的位置。
非常感谢
答案 0 :(得分:2)
使用Array.prototype.sort
:
info.children = fs.readdirSync(filepath).map(function(child) {
return getTree(path.join(filepath, child));
});
info.children.sort( function(a,b) {
// Directory index low file index
if (a.type === "directory" && b.type === "file") return -1;
if (b.type === "directory" && a.type === "file") return 1;
return a.path.localeCompare(b.path);
});