Donnez le tableau d'objets suivant, je dois les trier par ordre croissant de date.
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
de sorte que dans cet exemple, le résultat final serait John Smith, Sam Snead et Joe Blow.
J'essaie d'utiliser _. SortBy () de lodash, mais je ne parviens pas à faire un tri, peu importe comment j'essaie de l'utiliser:
_.sortBy(myArray, function(dateObj) {
return dateObj.date;
});
ou
_.sortBy(myArray, 'date');
Que dois-je changer pour que mon tableau soit trié correctement? J'ai aussi Moment.js, je peux donc l'utiliser pour formater la chaîne de date si nécessaire. J'ai essayé de convertir la propriété date en utilisant .unix (), mais cela ne faisait aucune différence.
Merci.
Vous n'avez pas vraiment besoin de lodash. Il suffit d'utiliser JavaScript Array.prototype.sort
méthode.
Vous devez créer Date
objets à partir de vos chaînes de date avant de pouvoir les comparer.
var myArray = [{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
}, {
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
}, {
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}];
myArray.sort(function compare(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA - dateB;
});
console.log(myArray);
Vos valeurs de date sont des chaînes, vous devez donc utiliser le constructeur new Date()
pour les changer en objets javascript date
. De cette façon, vous pouvez les trier (en utilisant _.sortBy
).
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
myArray = _.sortBy(myArray, function(dateObj) {
return new Date(dateObj.date);
});
console.log(myArray)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
Voici une solution utilisant Javascript standard en convertissant les deux valeurs en objet date et en comparant leur valeur.
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
Un extrait complet:
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
console.log(myArray);
écrivez juste _.sortBy({yourCollection}, {the field name});
lodash comprendra automatiquement qu'il s'agit d'une date et que tout fonctionnera comme par magie!
Impressionnant!