1

子オブジェクトの値でオブジェクトをソートするにはどうすればよいですか?

例:

[
    {
        name: 'Jhon',
        old: 20,
        last_message: {
            text: 'blah',
            timestamp: 1378188846
        }
    },
    {
        name: 'Bill',
        old: 45,
        last_message: {
            text: 'Hello, Jhon!',
            timestamp: 1378188956
        }
    },
    {
        name: 'Steave',
        old: 34,
        last_message: {
            text: 'Bye! ;)'
            timestamp: 1378188952
        }
    }
]

それが最大値とは無関係なオブジェクトの順序であるべきですlast_message.timestamp

どうやってするの?

4

2 に答える 2

2

ソート時にカスタム比較関数を指定できます

my_list.sort(function(a, b){return ...});

aより小さい場合は負の数、より大きいb場合は正の数、同等の場合は 0を返す必要があります。ab

ちなみに、デフォルトの関数は要素を文字列に変換してから文字列を比較するため、実際には関数を渡す必要があります。これは、配列に単に文字列が含まれている場合を除いて、ほとんど必要ありません。

たとえば、数字の配列があり、それを呼び出すとsort、並べ替えの結果に驚かれることでしょう。

[1, 2, 3, 30, 20, 10]

デフォルトで与える

[1, 10, 2, 20, 3, 30]

その文字列変換のためです。

あなたの場合、ソート機能はおそらく

function(a, b) {
    return a.last_message.timestamp - b.last_message.timestamp;
}

最近のメッセージを最初にするか最後にするかによって、またはその反対

于 2013-09-03T07:03:00.843 に答える
1
arr.sort(function(a, b) {
    return a.last_message.timestamp - b.last_message.timestamp;
});
于 2013-09-03T07:05:42.847 に答える