我有一个用于按日期对事件进行排序的函数:
function SortByDateAsc() {
return function (a,b) {
var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year']));
var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year']));
return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : 0;
}
}
如果我想按日期排序,那么按位置排序,例如我在同一日期有两个结果,但它们位于两个不同的位置。我如何按字母顺序添加要排序的位置?
所以我的最终结果应该是日期加上按字母顺序排列的位置??
答案 0 :(得分:3)
在返回0
之前,为该位置添加类似的检查。此外,创建日期的方式也少得多。
function SortByDateAsc() {
return function (a,b) {
// the month-1 is because Date months are 0-indexed, which
// might not be necessary if your months are already 0-indexes
var aDate = new Date(a.Year, a.Month-1, a.Day).getTime();
var bDate = new Date(b.Year, b.Month-1, b.Day).getTime();
return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : someLocationComparator(a,b);
}
}
好好阅读the Date
docs。
答案 1 :(得分:1)
返回值将告诉系统您想要的订单。
如果要对两个相同日期的事件进行排序,则不要在sort函数上返回0:
function SortByDateAsc() {
return function (a,b) {
var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year']));
var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year']));
var diff = aDate - bDate;
if (diff !== 0)
return diff;
return (a.location < b.location) ? -1 : (a.location > b.location) ? 1 : 0;
}
}