2016-07-16 3 views
-1

Я пытаюсь разобрать несколько субподписных фидов в скрипте Google. Я могу назвать этот скрипт Google (redditFeeds()), и он возвращает название, ссылку и дату в мою таблицу. Тем не менее, я хочу сортировать сообщения по дате, чтобы сначала увидеть последние сообщения. Я попытался использовать sort() в массиве различными способами и не могу получить что-либо по дате. Я даже пытался преобразовать дату в объект Date, и это не исправило.Сортировка массива в javascript на основе даты

function redditFeeds() { 

    var entries_array = []; 
    var subreddit_array = ['https://www.reddit.com/r/funny/top/.rss','https://www.reddit.com/r/news/top/.rss'] 

    for (var s = 0; s < subreddit_array.length; s++) { 

    var xml = UrlFetchApp.fetch(subreddit_array[s]).getContentText(); 
    var document = XmlService.parse(xml); 
    var root = document.getRootElement(); 
    var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); 
    var entries = document.getRootElement().getChildren('entry', atom); 

    for (var i = 0; i < entries.length; i++) { 
     var title = entries[i].getChild('title', atom).getText(); 
     var title = entries[i].getChild('link', atom).getText(); 
     var link = entries[i].getChild('link', atom).getAttribute('href').getValue(); 
     var date = entries[i].getChild('updated', atom).getValue(); 
     entries_array.push([title, link, date]); 
    } 
    } 

    //return entries_array; 

    //doesn't work 
    //entries_array.sort(function(a,b) { 
    // return a.date - b.date; 
    //}); 

    //also not working 
    return entries_array.sort(function(a,b) { 
    new Date(a.date).getTime() - new Date(b.date).getTime(); 
    }); 

} 
+0

Возможный дубликат [Сортировка массива объектов JavaScript] (http://stackoverflow.com/questions/979256/sorting-an-array-of-javascript-objects) – Tibrogargan

ответ

2

Я думаю, что вы хотите ниже, при условии, entries_array выглядит, как я думаю, что это делает. Я понятия не имею, что должно было быть start в вашем коде ... Я думаю, каждая запись в entries_array представляет собой массив с тремя членами в нем, третий - это какое-то представление даты. Если это тот, который может быть проанализирован с помощью new Date, то этот код должен работать:

return entries_array.sort(function (a, b) { 
    return new Date(a[2]) - new Date(b[2]); 
}); 

Если это не так, пожалуйста, поделитесь, что entries_array выглядит.

+0

«start» был опечаткой и должен быть «датой», но ваше решение сработало для меня. Благодаря! – Keith

+0

«дата» тоже не сработала. – smarx

+0

Правильно, он не работал в любом случае, просто хотел ответить на ваш вопрос о «запуске», не имеющем смысла. – Keith

1

я вижу возвращение пропавшего, во внутренней функции сортировки, и вы не должны нуждаться в GetTime()

return entries_array.sort(function(a,b) { 
    return new Date(a.start) - new Date(b.start); 
    }); 
+1

Это правда, но я считаю, что оба .start' и 'b.start' являются' undefined', поэтому это не решит проблему. – smarx

+0

Определенно да, но вопрос OP был связан с сортировкой, я не пытался проверить, действительно ли данные или нет. – Massanu

0

Простым способом сортировки объектов даты является преобразование их в метки времени UNIX с использованием dateObj.getTime(). Это создает целое число секунд с полуночи в Новый Год 1970 года. Это очень полезно, если вы работаете в нескольких часовых поясах.

Смежные вопросы