2016-07-16 16 views
-1

Ich versuche, mehrere Subreddit-Feeds in einem Google Script zu analysieren. Ich kann dieses Google Script (redditFeeds()) aufrufen und den Titel, den Link und das Datum in meine Tabelle zurückgeben. Allerdings möchte ich die Beiträge nach Datum sortieren, damit ich die neuesten Beiträge zuerst sehen kann. Ich habe versucht, sort() auf dem Array auf verschiedene Arten zu verwenden und kann nichts sortieren nach absteigendem Datum. Ich habe sogar versucht, das Datum in ein Date-Objekt zu konvertieren, und das hat es nicht behoben.Sortierung eines Arrays in Javascript basierend auf Datum

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

Mögliche Duplikate von [Sortierung eines Arrays von JavaScript-Objekten] (http://StackOverflow.com/Questions/979256/Sorting-an-Array-of-Javascript-Objects) – Tibrogargan

Antwort

2

Ich glaube, Sie wollen, dass die unten nicht brauchen, vorausgesetzt entries_array sieht aus wie ich denke, es tut. Ich habe keine Ahnung, was start in Ihrem Code sein sollte ... Ich denke, jeder Eintrag in entries_array ist ein Array mit drei Mitgliedern darin, das dritte ist eine Art Darstellung eines Datums. Wenn es eine, die durch new Date analysiert werden kann, dann sollte dieser Code funktionieren:

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

Wenn das nicht richtig ist, bitte teilen, was entries_array aussieht.

+0

"Start" war ein Tippfehler und sollte "Datum" sein, aber Ihre Lösung hat für mich funktioniert. Vielen Dank! – Keith

+0

"Datum" hätte auch nicht funktioniert. – smarx

+0

Richtig, es funktionierte nicht so oder so, nur wollte ich auf Ihren Punkt über "Start" antworten, der keinen Sinn ergibt. – Keith

1

Ich sehe eine Rückkehr fehlt, in der inneren Sortierfunktion und Sie sollten die getTime()

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

Dies ist wahr, aber ich glaube, beide "a .start' und 'b.start' sind" undefiniert ", so dass das Problem nicht gelöst wird. – smarx

+0

Definitiv ja, aber die OP-Frage wurde mit dem Sortieren in Verbindung gebracht, ich habe nicht versucht zu sehen, ob die Daten gültig sind oder nicht – Massanu

0

Eine einfache Möglichkeit, Datumsobjekte zu sortieren, besteht darin, sie unter Verwendung von dateObj.getTime() in UNIX-Zeitstempel zu konvertieren. Dies erzeugt eine ganze Zahl von Sekunden seit Mitternacht am Neujahrstag 1970. Es ist sehr nützlich, wenn Sie in mehreren Zeitzonen arbeiten.

Verwandte Themen