[javascript]arr.sort()で配列をソート


arr.sort()はunderbar課題を行う際に認識される手法の一つであるが,戻り値によるソートの仕方が混同されているため,少なからぬ苦労をしている.だからsort()の方法を勉強して整理します.
Array.prototype.sort()
sort()メソッドは、配列内の要素をソートすることによって配列を返します.
元の配列を並べ替えて返すことに重点を置きます!
sort(compareFunction)
パラメータを関数として使用します.
compareFunctionには、ソート順を定義する関数が含まれます.
省略すると、デフォルトでは昇順で並べ替えられ、Unicode値に基づいて自動的に並べ替えられます.
let arr = ["apple", "pear", "watermelon", "banana"];

arr.sort();
// ["apple", "banana", "pear", "watermelon"]
エレメントがnumberタイプなら?
let numArr = [4, 2, 6, 8, 1, 19, 30];

numArr.sort();
//[1, 19, 2, 30, 4, 6, 8]
昇順で並べ替えられると思いますが、戻り値を見ると、並べ替えがおかしいことに気づきます.
数値ソートでは、2は19より前でなければならないが、数値も文字列に変換され、Unicode値でソートされる.
この場合、パラメータとしてcompareFunctionを使用してソートできます.
compareFunctionを使用すると、配列要素は関数の戻り値に基づいてソートされます.
  • 戻り値が正の場合
    bをaの前に並べる.
  • 戻り値が負の場合
    aをbの前に並べる.
  • 戻り値が0の場合
    a,bの位置は変わらない.
  • 昇順
  • 最初の買収が2番目の買収より小さい場合>return-1
  • の2つのパラメータは同時に>0
  • を返します.
  • 第1回目の買収が第2回目の買収より大きい場合>1
  • に戻る
    let numArr = [4, 2, 6, 8, 1, 19, 30];
    
    numArr.sort(function(a,b) {
      if(a<b) return -1;	//a를 b보다 앞에 정렬 
      if(a>b) return 1;	//b를 a보다 앞에 정렬 
      if(a===b) return 0;	//변경하지 않음
    });
    //[1, 2, 4, 6, 8, 19, 30]
    上記のコードを開発者コンソールのdebuggerに返すと、パラメータaはarr[1]を含み、パラメータbはarr[0]を含み、両者を比較する.すなわち、パラメータaは以下の要素を含み、bは現在の要素を含む.
    降順
    降順はreturn値の前に見られた昇順とは逆です.
    let numArr = [4, 2, 6, 8, 1, 19, 30];
    
    numArr.sort(function(a,b) {
      if(a<b) return 1;	//b를 a보다 앞에 정렬 
      if(a>b) return -1;	//a를 b보다 앞에 정렬 
      if(a===b) return 0;	//변경하지 않음
    });
    //[30, 19, 8, 6, 4, 2, 1]
    数値ソートの簡略化
    ソート関数の戻り値は、任意の数値を返します.正の値を返すと、1番目のファクタは2番目のファクタより大きく、負の値を返すと、1番目のファクタは2番目のファクタより小さくなるので、数値を比較するときに戻り値をより簡潔に入れることができます.
    (InfinityとNaNが含まれていない場合)
    let numArr = [3, 6, 12, 40, 2, 25, 37];
    
    오름차순
    numArr.sort(function(a,b) {
        return a-b;
    });
    //[1, 2, 4, 6, 8, 19, 30]
    
    내림차순
    numArr.sort(function(a,b) {
        return b-a;
    });
    //[30, 19, 8, 6, 4, 2, 1]