Moment: Fonction de comparaison de tri

Créé le 25 févr. 2014  ·  6Commentaires  ·  Source: moment/moment

Lors du tri d'une liste d'objets de moment (ou d'objets qui ont un attribut qui est un moment et devrait être la clé de tri), ce serait formidable s'il y avait une fonction de comparaison incluse. Pour que nous puissions faire des choses comme :

array.sort(m.compare)

Commentaire le plus utile

En raison de la fonction moment#valueOf , la fonction de comparaison est triviale.

var array = [
    moment(),
    moment().add(1, 'd'),
    moment().subtract(1, 'd')
];

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-24", "2014-02-25", "2014-02-23"] 

array.sort(function (a, b) {
    return a - b;
});

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-23", "2014-02-24", "2014-02-25"]

Tous les 6 commentaires

En raison de la fonction moment#valueOf , la fonction de comparaison est triviale.

var array = [
    moment(),
    moment().add(1, 'd'),
    moment().subtract(1, 'd')
];

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-24", "2014-02-25", "2014-02-23"] 

array.sort(function (a, b) {
    return a - b;
});

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-23", "2014-02-24", "2014-02-25"]

Merci.

J'utilisais explicitement moment#valueOf , il semble que je n'en ai pas besoin.

Avec tapuscrit, ce n'est pas aussi simple. Les frappes ne vous permettent pas de dire a - b .

Au lieu de cela, je dis juste quelque chose comme :

a.isBefore(b) ? -1 : 1

Je ne sais pas si j'ai compris le 1 et le -1 dans le bon sens.

Avec tapuscrit, ce n'est pas aussi simple. Les frappes ne vous permettent pas de dire a - b.

Vous pouvez explicitement appeler le moment#valueOf comme a.valueOf() - b.valueOf()

J'ai un faible pour :

momentsArray.sort((a, b) => a.diff(b));

moi même.

@robertmassaioli fais attention à ton code,

a.isBefore(b) ? -1 : 1

si a est le même, il les échangerait plutôt que de les garder en place. Je sais que cela n'a pas l'air de beaucoup, mais cela pourrait être inattendu pour certains.

Cette page vous a été utile?
0 / 5 - 0 notes