0

我有一个函数用于按 Date 对事件进行排序:

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;

    }
}

如果我想按日期然后按位置排序,例如我有两个相同日期的结果,但它们位于两个不同的位置。如何添加要按字母顺序排序的位置?

所以我的最终结果应该是日期加上按字母顺序排列的位置?

4

2 回答 2

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);
  }
}

好好阅读文档Date

于 2013-04-15T15:55:07.857 回答
1

返回值会告诉系统你想要什么顺序。

如果要对两个相同日期的事件进行排序,请不要在排序函数上返回 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;
    }
}
于 2013-04-15T15:56:02.540 回答