عند فرز قائمة الكائنات اللحظية (أو الكائنات التي لها سمة هي لحظة ، ويجب أن تكون مفتاح الفرز) ، سيكون من الرائع تضمين وظيفة مقارنة. حتى نتمكن من القيام بأشياء مثل:
array.sort(m.compare)
بسبب وظيفة moment#valueOf
، فإن وظيفة المقارنة تافهة.
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"]
شكرا.
كنت أستخدم بشكل صريح moment#valueOf
، ويبدو أنني لست بحاجة إلى ذلك.
مع الكتابة المطبوعة ، هذا ليس بهذه البساطة. لا تسمح لك الكتابة أن تقول a - b
.
بدلاً من ذلك ، أقول شيئًا مثل:
a.isBefore(b) ? -1 : 1
لست متأكدًا مما إذا كنت قد حصلت على 1 و -1 بالطريقة الصحيحة.
مع الكتابة المطبوعة ، هذا ليس بهذه البساطة. لا تسمح لك الكتابة أن تقول أ - ب.
يمكنك استدعاء اللحظة صراحة # valueOf كـ a.valueOf() - b.valueOf()
أنا متحيز لـ:
momentsArray.sort((a, b) => a.diff(b));
نفسي.
robertmassaioli كن حذرا مع التعليمات البرمجية الخاصة بك ،
a.isBefore(b) ? -1 : 1
إذا كانت a هي نفسها ، فسيتم تبديلها بدلاً من إبقائها في مكانها. أعلم أنه لا يبدو كثيرًا ولكنه قد يكون غير متوقع بالنسبة للبعض.
التعليق الأكثر فائدة
بسبب وظيفة
moment#valueOf
، فإن وظيفة المقارنة تافهة.