簡體   English   中英

使用JavaScript在錨定標記中的HTML鏈接的alpha排序數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM