Achtung: Diese Seite enthält Partner- und Werbe-Links. Daher ist diese Seite im Gesamten als Werbeanzeige zu verstehen!
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"
}];
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']);
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']);