0

私はこの質問から始めました:オブジェクトの JS オブジェクトをソートする方法は?

2 つのコメントから、オブジェクトの Javascript オブジェクト (単なる 2D オブジェクト) をソートする最良の方法を思いつきました。

dataが 2D オブジェクト変数であると仮定してcustomer、内部オブジェクトの値で並べ替えます。

まず、次のようにオブジェクトの配列に変換します。

data = $.map(data, function(k, v) {
    return [k];
});

次に、次のように並べ替えを行います。

data = data.sort(function(a, b){
    return a.customer > b.customer? 1: -1;
});

うまく機能しますが、最初に日付変数で並べ替え、次に顧客変数で並べ替えたいと思います。ソート関数が SQL で機能する方法と同じです ( ...sort by date desc, customer asc;)。

しかし、私が本当にやりたいことは、実際にはもっと単純です。null日付の値を並べ替えるときは、との値を区別するだけ!nullです。その結果、すべての null 値がグループ化され、null 以外のすべての値がグループ化されます。

その後、すべての最上位オブジェクトが整頓されているはずcustomerです。

私はそれがどのように機能するべきだと思うかに基づいて、このアイデアを思いつきました:

data = data.sort(function(a, b){
    if (a.fin_date !== null){
        return 1;
    }
    return a.customer > b.customer? 1: -1;
});

それは一種の働きです。すべての値を最初にソートし、nullすべての null 値は正しいアルファベット順ですが、他のすべてのfin_date値 ( !null1) はアルファベット順ではありません。それらはどちらに従っても順番に並んでいませんfin_datefin_date等しくないオブジェクトnullは、特定の順序で表示されません。

それが私の問題です: fin-date!=のオブジェクトをnullアルファベット順にする必要があります。

ありがとう!

4

1 に答える 1

2

日付をまったく比較していません。このソート機能のようなものを試してください:

function(a, b) {
    var aDate = new Date(a.fin_date),
        bDate = new Date(b.fin_date);

    if (aDate < bDate) return -1;
    else if (aDate > bDate) return 1;

    return a.customer > b.customer ? 1: -1;
}

これは、すべての日付が 1970 年以降でnew Date(null)あることを前提としています (1970 年 1 月 1 日 00:00:00 GMT であるため)。

ここにjsFiddleがあります。

于 2013-03-06T18:26:18.837 に答える