web-dev-qa-db-fra.com

Comment trier un tableau d'objets javascript par date

J'essaie de trier un tableau d'objets avec chaque objet contenant 

var recent = [{id: "123",age :12,start: "10/17/13 13:07"} , {id: "13",age :62,start: "07/30/13 16:30"}];

Le format de la date est: mm/dd/yy hh:mm

Je veux trier par ordre de date avec le plus récent en premier. Si la date est la même, elle doit être triée à l’heure.

J'ai essayé la fonction de tri ci-dessous. Mais ça ne fonctionne pas.

recent.sort(function(a,b))
{
    a = new Date(a.start);
    b = new Date(b.start);
    return a-b;
});

Aussi, comment dois-je parcourir les objets pour le tri? Quelque chose comme:

for (var i = 0; i < recent.length; i++)
    {
        recent[i].start.sort(function (a, b)
        {
            a = new Date(a.start);
            b = new Date(b.start);
            return a-b; 
        } );
    }

Il peut y avoir un nombre quelconque d'objets dans le tableau.

37
Anthea

Comme il a été souligné dans les commentaires, la définition de recent n'est pas correcte javascript.

Mais en supposant que les dates sont des chaînes:

var recent = [
    {id: 123,age :12,start: "10/17/13 13:07"}, 
    {id: 13,age :62,start: "07/30/13 16:30"}
];

puis, triez comme ceci:

recent.sort(function(a,b) { 
    return new Date(a.start).getTime() - new Date(b.start).getTime() 
});

Plus de détails sur la fonction de tri de W3Schools

54
Chris Charles
recent.sort(function(a,b) { return new Date(a.start).getTime() - new Date(b.start).getTime() } );
5
Tom Bowers

Cette fonction vous permet de créer un comparateur qui indiquera la clé sur laquelle vous souhaitez comparer:

function createDateComparator ( path = [] , comparator = (a, b) => a.getTime() - b.getTime()) {
  return (a, b) => {
    let _a = a
    let _b = b
    for(let key of path) {
      _a = _a[key]
      _b = _b[key]
    }
    return comparator(_a, _b)
  }
}


const input = (
  [ { foo: new Date(2017, 0, 1) }
  , { foo: new Date(2018, 0, 1) }
  , { foo: new Date(2016, 0, 1) }
  ]
)

const result = input.sort(createDateComparator([ 'foo' ]))

console.info(result)

0
cchamberlain