Saat mengurutkan daftar objek momen (atau objek yang memiliki atribut momen, dan harus menjadi kunci pengurutan), akan lebih bagus jika ada fungsi perbandingan yang disertakan. Sehingga kita bisa melakukan hal-hal seperti:
array.sort(m.compare)
Karena fungsi moment#valueOf
, fungsi perbandingan menjadi sepele.
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"]
Terima kasih.
Saya secara eksplisit menggunakan moment#valueOf
, sepertinya saya tidak perlu melakukannya.
Dengan TypeScript, ini tidak sesederhana itu. Pengetikan tidak memungkinkan Anda untuk mengatakan a - b
.
Sebaliknya, saya hanya mengatakan sesuatu seperti:
a.isBefore(b) ? -1 : 1
Tidak yakin apakah saya mendapatkan 1 dan -1 dengan cara yang benar.
Dengan TypeScript, ini tidak sesederhana itu. Pengetikan tidak memungkinkan Anda untuk mengatakan a - b.
Anda dapat secara eksplisit memanggil moment#valueOf sebagai a.valueOf() - b.valueOf()
Saya memihak:
momentsArray.sort((a, b) => a.diff(b));
saya sendiri.
@robertmassaioli hati-hati dengan kode Anda,
a.isBefore(b) ? -1 : 1
jika a sama, itu akan menukarnya, daripada menyimpannya di tempatnya. Saya tahu kedengarannya tidak banyak, tetapi bagi sebagian orang mungkin tidak terduga.
Komentar yang paling membantu
Karena fungsi
moment#valueOf
, fungsi perbandingan menjadi sepele.