我想按时间、日期排序。 这是我的尝试:
var days = new Array();
var days['SU'] = 0;
var days['MO'] = 1;
var days['TU'] = 2;
var days['WE'] = 3;
var days['TH'] = 4;
var days['FR'] = 5;
var days['SA'] = 6;
events.sort(function(a, b)
{
if(a['day'] != b['day'])
{
return (days[a['day']] < days[b['day']]) ? 1 : -1;
}
else if(a['time'] != b['time'])
{
return (a['time'] < a['time']) ? 1 : -1;
}
else
return 0;
);
尚未测试,但我这样做正确吗? (时间递增,天数递增)周一上午 8 点、周二上午 8 点、周一晚上 9 点是我正在寻找的顺序。
干杯。
events[0]['day'] = 'MO';
events[0]['time'] = 8;
events[1]['day'] = 'MO';
events[1]['time'] = 21;
events[2]['day'] = 'TU';
events[2]['time'] = 8;
感谢@T.J,我的解决方案似乎有效。克劳德
events = new Array();
events[0] = new Array();
events[0]['day'] = 'MO';
events[0]['time'] = 8;
events[1] = new Array();
events[1]['day'] = 'MO';
events[1]['time'] = 21;
events[2] = new Array();
events[2]['day'] = 'TU';
events[2]['time'] = 8;
var days = {
'SU': 0,
'MO': 1,
'TU': 2,
'WE': 3,
'TH': 4,
'FR': 5,
'SA': 6
};
events.sort(function(a, b)
{
if (a.time != b.time)
{
return a.time - b.time;
}
else if (a.day != b.day)
{
return days[a.day] - days[b.day];
}
else
{
return 0;
}
});
压缩:
events.sort(function(a, b)
{
return a.time != b.time
? a.time - b.time
: days[a.day] - days[b.day];
});
最佳答案
你的基本方法是正确的。一些注意事项:
您没有使用
days
作为数组,因此我不会将其设为数组。相反:var days = { 'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 };
此外,您不需要这些引号,因为这些字符串都不是关键字,因此:
var days = { SU: 0, MO: 1, TU: 2, WE: 3, TH: 4, FR: 5, SA: 6 };
...但您可以选择将它们保留为一种风格,或者避免稍后添加关键字。
您不必使用括号符号来查找属性 (
a['day']
),除非您用于属性名称的字符串是动态的或者属性名称是保留字。day
两者都不是,因此您可以使用更简单的点分符号 (a.day
)。JavaScript 中没有
elseif
;使用else if
。您可以简化此操作:
return (days[a['day']] < days[b['day']]) ? 1 : -1;
至
return days[a.day] - days[b.day];
..您也许可以对您的
时间
值执行类似的操作,但是我不知道它们是什么,所以...现在您我已经发布了,你也可以。强烈建议始终使用大括号,而不仅仅是在您“需要”时使用它们。 (您的三个分支实际上都不需要它们,但您只在两个分支上使用它们。)
您将
a['time']
与a['time]
进行比较,而不是b['time']
> 检查相等性时。您尚未结束函数(缺少
}
)由于您只需减去
时间
值,因此不需要最终的相等性检查。所以:
events.sort(function(a, b) { if (a.day != b.day) { return days[a.day] - days[b.day]; } else { return a.time - b.time; } });
...或者您可以进一步压缩它:
events.sort(function(a, b) { return (a.day != b.day ? days[a.day] - days[b.day] : a.time - b.time); });
关于javascript - JavaScript 中的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610018/