[英]Custom Sorting By 24-hour clock Time in Backbone/Javascript
我有由日期和24小時制時鍾組成的骨干集合。 我希望能夠按時間對我的收藏進行排序。
因此,由於正常的排序功能會像這樣對1:00、17:00和19:00進行排序(例如),因此我嘗試按該順序顯示17:00、19:00和1:00。 在這種情況下,第二天的1:00在時間19:00進行。
由於這種情況僅在值小於或等於12時發生,因此最簡單的解決方案似乎是:對大於12的值進行排序; 排序值小於12; 將小於12的排序值附加到大於12的值。因此,兩個單獨的排序列表。
comparator: function( a, b ) {
if(!this.sortColumn ) return 0;
if(sortColumn == 'time') {
switch (a.get('time')) {
case a > 12: return 1;
case a <= 12: return 2;
}
}
}
這是我的一個粗略想法。 這不會對兩個組進行排序。 想法是大於12的情況先於小於12的情況,但是它們將不進行排序。
編輯:請注意,所有事件都在第1天的第1天的12:00 PM之后和第二天的第二天的12:00 PM之前發生。這就是為什么像1:00這樣的日期將在像19:00這樣的日期之后。
任何建議都太棒了。
謝謝
您可以將比較器函數定義為“ sortBy” :
“ sortBy”比較器函數采用一個模型,並返回一個數字或字符串值,通過該數字或字符串值可以相對於其他模型對模型進行排序。
然后目標是產生與您的需求相對應的排序值。 正如@Pointy在評論中指出的那樣,在12:00之前的時間加上24可以解決問題
例如
var C = Backbone.Collection.extend({
comparator: function (m) {
var t = m.get('time'),
h = parseInt(t.substr(0, 2), 10),
m = parseInt(t.substr(3), 10);
if (h<12) h = h+24;
return h *60 + m;
}
});
var c = new C([
{time: '01:17'},
{time: '01:00'},
{time: '12:00'},
{time: '07:00'},
{time: '15:00'}
]);
console.log(c.pluck('time'));
我沒有看到僅按實際數字訂購它們的問題。
var times = [];
// generate some data..
// [1:00, 1:30, 2:00 ...]
for(var i=0; i < 24; i++){times.push(i.toString() + ':00');
times.push(i.toString() + ':30')}
// standard sorting
console.log(_.sortBy(times, function(num){ return num}))
> ["0:00", "0:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "1:00", "1:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30", "2:00", "2:30", "3:00", "3:30", "4:00", "4:30", "5:00", "5:30", "6:00", "6:30", "7:00", "7:30", "8:00", "8:30", "9:00", "9:30"]
// improved sorting
console.log(_.sortBy(times, function(num){ var key = parseInt(num.split(':')[0]); if (key >= 12) {return key - 12} return key + 20 }))
> ["12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30", "0:00", "0:30", "1:00", "1:30", "2:00", "2:30", "3:00", "3:30", "4:00", "4:30", "5:00", "5:30", "6:00", "6:30", "7:00", "7:30", "8:00", "8:30", "9:00", "9:30", "10:00", "10:30", "11:00", "11:30"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.