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;

    }
}

日付で並べ替えてから場所で並べ替えたい場合、たとえば、同じ日付で 2 つの結果がありましたが、それらは 2 つの異なる場所にあります。場所を追加してアルファベット順に並べ替えるにはどうすればよいですか?

だから私の最終結果は、日付と場所をアルファベット順に並べたものになるはずです??

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

docsをよく読んでくださいDate

于 2013-04-15T15:55:07.857 に答える
1

戻り値は、どの順序が必要かをシステムに伝えます。

同じ日付の 2 つのイベントを並べ替えたい場合は、並べ替え関数で 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 に答える