2017-02-15 13 views
0

Хорошо. Это включает как JavaScript, так и скрипт Google Apps. Проблема заключается в javascript.альфа-сортировка массива HTML-ссылок в якорных тегах с использованием javascript

Я создаю список ссылок на файлы в папке Google Drive, используя следующий код:

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>'); 
    } 
} 

Это создает список файлов массив, который я хочу альфа рода. Я хочу сортировать их по имени файла (в 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: Я понятия не имею, откуда взялись три запятой над «именем».

Что я могу сделать дальше?

ответ

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> 

Edit: Ваш сорт работает, как освобожденный. Поскольку у вас есть нижний регистр и имя файла в верхнем регистре, он сначала сортирует верхний регистр, а затем сортирует строчные буквы.

Я изменил код, чтобы помочь сортировать лучше:

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() 

Надежда, что помогает, дайте мне знать!

+0

Отлично! Чувство немного глупое, если не пропустить прописную вещь. – killerbee

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>' 
    }); 

} 

Подчеркивание действительно хорош при сортировке коллекции данных. Если вы не уверены в структуре папки, вы можете console.log (JSON.stringify (папка)), которая покажет вам структуру JSON в этой папке.

Вот plunker сниппет, а также: http://plnkr.co/edit/EDO3DWVOraRb5Y02XOvh?p=preview

+0

Я не уверен, как получить массив массивов. Он работает с 4 файлами вручную, но реальный список, вероятно, будет 20+ файлов от нескольких пользователей, которые время от времени меняются. Я думаю _.sortBy должен быть для (filelist, ~ something). Может быть, я что-то пропустил ... – killerbee