[英]alpha sort array of HTML links in anchor tags using javascript
好的-這涉及到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中將其放在凌亂的Google鏈接之前)。
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:我不知道“名稱”上方的三個逗號來自何處。
接下來我該怎么辦?
由於文件夾用於獲取文件的集合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結構。
這也是一個小段代碼: http ://plnkr.co/edit/EDO3DWVOraRb5Y02XOvh?p=preview
這將解決您的逗號難題,您將獲得額外的逗號,因為您在此處將數組轉換為字符串:
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()
希望對您有所幫助,讓我知道!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.