JavaScript sort()ソート

1069 ワード

sort()文法:
arrayObject.sort(fn);
パラメータfnは任意であり、空の場合は、配列中の要素をアルファベット順に並べ替え、正確には、文字コード順に並べ替えられます.So,厳密な並べ替えを行うには,配列の要素を文字列に変換して並べ替えます.
他の標準によって並べ替えたいなら、比較関数を提供しなければなりません.間違いなく関数です.関数のために二つのパラメータを提供します.個人的な理解は並べ替えの中の二つの要素です.なぜこのような推測がありますか?ルールを見てください.
function fn (m,n){
        if(m<n)
            return -1;//  ,  -1
        else if(m>n)
            return 1;//  ,  1
        else return 0;//  ,  0
    }
簡素化後:
function fn (m, n) {
    return m-n;
}
mがnより小さいと0より小さい値を返します.mはnの前に現れます.
mがnに等しいなら、0を返します.
mがnより大きいと0より大きい値を返します.mはnの後に現れます.
はっきり言って、関数fnが戻ってきた値がfalseであれば、昇順で並べ替えられ、もしtrueに戻ったら、降順で並べ替えられます.(mとnは並べ替え順で比較します)
でも、fnで書いたらどうなりますか?
function fn (m, n) {
      return m < n;
 }
fnの戻り値がfalseである場合、降順で並べ替えられます.trueを返すと、並べ替えが昇順になります.(mとnは並べ替え順で比較します)
ランダムに並べ替えたいなら?
function fn () {
  return 0.5 - Math.random();
}
Math.random()は0から1までの乱数を返します.0.5-Math.random()はランダムにtrueとfalseを返します.このようにランダムに並べ替えられます.
もう一度JSの柔軟さを感嘆します.一つのsortで並べ替えができます.