javascript高次関数----sort()

1849 ワード

ランキング関数sort()についてはよく知っていると思いますが、javascriptのsort()にはいくつかの違いがあります.たとえば:
var numarr = [12,20,13,5];
numarr.sort();
alert(numarr);
皆さんは試してみてもいいです.結果は10,13,20,5です.なぜこのような結果が現れたのですか?なぜなら、javascript sort()関数は元素のASCIIコードに基づいて並べられています.つまり、元素をStringに変換してから並べ替えます.この関数を使って、明らかに穴の中に跳ぶのではないですか?いいえ、sort()は高次関数として、一つの関数を受け入れて、順序付けをカスタマイズすることができます.配列を並べ替えるなら、こう書いてもいいです.
var numarr = [10,13,20,5];
numarr.sort(function(x,y){
    if(xreturn -1}
    if(x>y){return 1}
});
匿名関数における二つのパラメータの関係は以下のようになる.
x<y:並べ替えされた配列の中でxはyの前にあるべきで、0より小さい数x=y:は0を返します.x>y:並べ替え後xはyの後ろにあるべきで、0より大きい数を返します.
したがって、上のコードは配列を昇順に並べていることが分かります.降順配列はこのように書くべきです.
var numarr = [10,13,20,5];
numarr.sort(function(x,y){
    if(xreturn 1}
    if(x>y){return -1}
});