J'ai un tableau d'objets JavaScript. Mon tableau est défini comme ceci:
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: '03/29/2014' },
{ id: '2', username: 'woohoo', active: true, createdon: '03/28/2014' },
{ id: '3', username: 'someuser', active: true, createdon: '03/30/2014' }
];
Ce tableau est en fait rempli dynamiquement. Pourtant, je dois trier les résultats par la valeur créée sur l'ordre croissant. Pour ce faire, j'essaie d'utiliser lodash. La valeur créée sur représente une date. Actuellement, j'essaye ce qui suit:
// ORDER BY createdOn
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 < date2;
});
_.forEach(myObjects, function(result) {
console.log(result);
});
Malheureusement, myObjects n'est toujours pas trié après avoir exécuté cette fonction. Qu'est-ce que je fais mal?
Merci!
Je viens de passer par lodash doc, et peut-être vous pourriez essayer sortBy
Essayez-le: http://jsfiddle.net/3Wza8/
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: new Date('03/29/2014') },
{ id: '2', username: 'woohoo', active: true, createdon: new Date('03/28/2014') },
{ id: '3', username: 'someuser', active: true, createdon: new Date('03/30/2014') }
];
myObjects = _.sortBy(myObjects, 'createdon');
_.forEach(myObjects, function (result) {
console.log(result);
});
EDIT: comme l'a souligné Cookie Monster, il est important que votre champ createdon
soit une date et non une chaîne.
Le problème est que sort
attend une fonction qui renvoie -1, 0 ou 1. Votre fonction ne renvoie que 0 et 1.
Ce léger changement devrait le corriger:
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 - date2;
});