gpt4 book ai didi

javascript - Backbone/Javascript 中按 24 小时制时间自定义排序

转载 作者:行者123 更新时间:2023-11-28 18:55:11 25 4
gpt4 key购买 nike

我有 Backbone 集合,其中包含日期和 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 天的 12:00 PM 之后和第二天(第 2 天)的 12:00 PM 之前。这就是为什么像 1:00 这样的日期将在像 19:00 这样的日期之后。

任何建议都会很棒。

谢谢

最佳答案

您可以定义您的 comparator function as a "sortBy" :

"sortBy" comparator functions take a model and return a numeric or string value by which the model should be ordered relative to others.

目标是生成符合您要求的排序值。正如 @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'));

http://jsfiddle.net/nikoshr/5srqn5b4/

关于javascript - Backbone/Javascript 中按 24 小时制时间自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com