Al ordenar una lista de objetos de momento (u objetos que tienen un atributo que es un momento, y debería ser la clave de clasificación), sería genial si se incluyera una función de comparación. Para que podamos hacer cosas como:
array.sort(m.compare)
Debido a la función moment#valueOf
, la función de comparación es trivial.
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"]
Gracias.
Estaba usando explícitamente moment#valueOf
, parece que no lo necesito.
Con mecanografiado, esto no es tan simple. La mecanografía no le permite decir a - b
.
En cambio, solo digo algo como:
a.isBefore(b) ? -1 : 1
No estoy seguro si obtuve ese 1 y -1 de la manera correcta.
Con mecanografiado, esto no es tan simple. Los mecanografiados no le permiten decir a - b.
Puede llamar explícitamente al momento # valueOf como a.valueOf() - b.valueOf()
Soy parcial a:
momentsArray.sort((a, b) => a.diff(b));
yo mismo.
@robertmassaioli tenga cuidado con su código,
a.isBefore(b) ? -1 : 1
si a es el mismo, los intercambiaría, en lugar de mantenerlos en su lugar. Sé que no parece mucho, pero podría ser inesperado para algunos.
Comentario más útil
Debido a la función
moment#valueOf
, la función de comparación es trivial.