オブジェクトをソート

少し前に数をソートで、ソートに触れましたけど
検索して調べてみると、これはつまり数が多ければ正、少なければ負、同じであれば0を返して
それで比較関数がなんたらかんかたらでソートしているんだとか。

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

良く見てみると、なるほどそーなっとる。


ならば数ではなくて、文字はどうすれば良いのか。

Array.sort(
    function(a, b) {return (a > b) ? 1: (a < b) ? -1: 0}
);

'-'ではなく、'<>'を使えば良いらしい。
1と-1を入れ替えると、reverse()をしたのと同じになった。


文字を比較できるのか?と疑問に思って

alert('b' > 'a'); //true
alert('a' > 'b'); //false

やってみると、アルファベット順を判別しているw
文字も普通に比較できるとは思わなかった。


だから、配列にオブジェクトが格納されていて
そのオブジェクトのidの名前順にするには

Array.sort(
    function(a, b) {return (a.id > b.id) ? 1: (a.id < b.id) ? -1: 0}
);

これでいけるんじゃないかと。
1と-1は、正と負であれば1でなくても構わない様子。
とにかく、sortの戻り値を正の数、負の数、0にすればその通りにソートしてくれるらしい。