thomaskekeisen.de

Aus dem Leben eines Bildschirmarbyters

Achtung: Diese Seite enthält Partner- und Werbe-Links. Daher ist diese Seite im Gesamten als Werbeanzeige zu verstehen!

Ausgangssituation

Bei der Entwicklung meines Blogs habe ich viel zu viel Zeit durch das Sortieren meiner Blog-Einträge verloren. Da ich meine Seite statisch mit gulp erzeuge, muss ich die JSON-Datei per Javascript parsen und dann mit moment.js und Lodash sortieren. Hier mein Versuchsaufbau: Ein Array, das nochmal pro Blog-Eintrag ein Objekt mit Datums- und Titel-Eigenschaft enthält.

        
            var blogPosts = [{
                date:  "2016-10-26 13:37:00",
                title: "Blog-Post 3"
            }, {
                date:  "2016-10-24 13:37:00",
                title: "Blog-Post 1"
            }, {
                date:  "2016-10-25 13:37:00",
                title: "Blog-Post 2"
            }];
        
    

Javascript-Code

Ich möchte meine Sortierung so, dass der neueste Blog-Eintrag an erster Stelle erscheint. Darum sortiere ich das Array absteigend nach dem Datum. Wichtig: _.sortBy() sortiert das Array immer aufsteigend , darum drehe ich das ganze Array nach dem Sortieren einfach mit einem .reverse() um.

        
            blogPosts = _.sortBy(blogPosts, function(o) {
                return new moment(o.date);
            }).reverse();
        
    

Alternativ kann auch _.orderBy() verwendet werden, das als dritten Parameter eine Sortierung akzeptiert:

        
            blogPosts = _.orderBy(blogPosts, function(o) {
                return new moment(o.date);
            }, ['desc']);
        
    

Datums-Objekt vermeiden?

Wer nicht darauf vertraut, dass das Datum- bzw. moment.js-Objekt auch korrekt als solches behandelt wird, kann die .format() -Methode von moment.js verwenden und das Datum einfach zu einer definitiv sortierbaren Zahl umwandeln.

        
            blogPosts = _.sortBy(blogPosts, function(o) {
                return new moment(o.date).format('YYYYMMDD');
            }).reverse();
        
    

Oder wieder alternativ mit _.orderBy() :

        
            blogPosts = _.orderBy(blogPosts, function(o) {
                return new moment(o.date).format('YYYYMMDD');
            }, ['desc']);
        
    

Teilen

Kommentare