Ao classificar uma lista de objetos de momento (ou objetos que têm um atributo que é um momento e deveria ser a chave de classificação), seria ótimo se houvesse uma função de comparação incluída. Para que pudéssemos fazer coisas como:
array.sort(m.compare)
Por causa da função moment#valueOf
, a função de comparação é 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"]
Obrigado.
Eu estava usando explicitamente moment#valueOf
, parece que não preciso.
Com o texto datilografado, isso não é tão simples. As digitações não permitem que você diga a - b
.
Em vez disso, apenas digo algo como:
a.isBefore(b) ? -1 : 1
Não tenho certeza se acertei 1 e -1 da maneira certa.
Com o texto datilografado, isso não é tão simples. As digitações não permitem que você diga a - b.
Você pode chamar explicitamente o momento # valueOf como a.valueOf() - b.valueOf()
Sou parcial para:
momentsArray.sort((a, b) => a.diff(b));
Eu mesmo.
@robertmassaioli tenha cuidado com seu código,
a.isBefore(b) ? -1 : 1
se a for o mesmo, ele os trocaria, em vez de mantê-los no lugar. Eu sei que não parece muito, mas pode ser inesperado para alguns.
Comentários muito úteis
Por causa da função
moment#valueOf
, a função de comparação é trivial.