web-dev-qa-db-fra.com

Trier le tableau d'objets JavaScript par valeur de propriété

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!

39
user70192

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.

72
lcoderre

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;
});
1
Frambot