好的 - 这个涉及javascript和Google Apps脚本。问题出在javascript上。
我正在使用以下代码创建一个指向Google云端硬盘文件夹中文件的链接列表:
function doGet(e) {
var template = '<table style =""><tr><th>name</th></tr>APPS_SCRIPT_CONTENT</table>';
var dir = 'MY_FOLDER_ID';
var folder = DriveApp.getFolderById(dir);
var contents = folder.getFiles();
var filelist = [];
var file, name, url = [];
while (contents.hasNext()) {
file = contents.next();
name = file.getName();
url = file.getUrl();
filelist = filelist.concat('<tr><td><a id="' + name + '" href="' + url + '">' + name + '</a></td></tr>');
}
}
这会生成一个我想要进行alpha排序的数组文件列表。我想根据文件的名称对它们进行排序(在ID中将它放在凌乱的谷歌链接之前)。
filelist.sort();
var output = HtmlService.createHtmlOutput(template.replace('APPS_SCRIPT_CONTENT', filelist));
return output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME);
对于四个示例文件,我得到以下输出:
,,,
name
Sample 2
Zzz file
aaa file
sample 1
有几个问题: 1:它们没有按字母排序。实际上,它们按上次修改日期排序。如果我修改文件并重新运行脚本,修改后的文件将跳转到顶部。 2:我不知道名字&#39;之上的三个逗号在哪里?来自。
接下来我该怎么办?
答案 0 :(得分:0)
由于文件夹用于getFiles,它是一个文件集合,你可以使用underscore.js基本上将它们排序为json数据,如下所示:
function doGet(e) {
var template = '<table style =""><tr><th>name</th></tr>APPS_SCRIPT_CONTENT</table>';
var dir = 'MY_FOLDER_ID';
var files = [{name: 'Sample 2', url:''},{name: 'zzz file', url:''},{name: 'aaa file', url:''},{name: 'Sample 1', url:''}];
var sortedArray = _.sortBy(files, 'name');
var filelist = [];
_.each(sortedArray, function(file){
filelist += '<tr><td><a id="' + file.name + '" href="' + file.url + '">' + file.name + '</a></td></tr>'
});
}
Underscore非常擅长排序数据集。如果您不确定文件夹的结构,可以使用console.log(JSON.stringify(folder)),它将显示文件夹的JSON结构。
以下是一个plunker片段:http://plnkr.co/edit/EDO3DWVOraRb5Y02XOvh?p=preview
答案 1 :(得分:0)
这将解决您的逗号困境,您将获得额外的逗号,因为您将数组转换为字符串:
template.replace('APPS_SCRIPT_CONTENT', filelist)
它基本上连接逗号的数组对象,给你一个这样的输出:
<table style =""><tr><th>name</th></tr><tr><td>Filename</td></tr>,<tr><td>Filename</td></tr>,<tr><td>Filename</td></tr>,<tr><td>Filename</td></tr>,<tr><td>Filename</td></tr>,
正如您所看到的,所有额外的逗号都不在tr或td标记内。这会将它们推出桌面并将其显示在顶部。替换的正确语法是:
template.replace('APPS_SCRIPT_CONTENT', filelist.join(""))
给出这个:
<table style =""><tr><th>name</th></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>Filename</td></tr><tr><td>
修改强> 您的排序正在排除。由于您具有小写和大写文件名,因此它首先对大写字母进行排序,然后对小写字母进行排序。
我修改了代码以帮助排序更好:
while (contents.hasNext()) {
file = contents.next();
name =file.getName()
idName = name.toUpperCase() // Use upper case for ID and it should sort correctly.
url = file.getUrl();
filelist = filelist.concat('<tr><td><a id="' + idName + '" href="' + url + '">' + name + '</a></td></tr>');
}
filelist.sort()
希望有所帮助,让我知道!