表題の件について、比較関数の挙動についていまいち理解ができていません。
MDNのsortメソッドについてのページとQiitaのこちらの記事を読んで、「sortメソッドで数値を比較しソートした場合は比較関数でソート順を定義する」ということは把握したつもりです。
そこで手元の環境(Node.js v14.4.0)で実際にコードを動かしてみたのですが、このときの比較関数に渡される引数の順番とが自分の中で腑に落ちませんでした。
JavaScript
1const arr = [1, 2, 3, 4, 5]; 2 3// 比較関数の定義 4const judge = (n, m) => { 5 console.log(`${n} > ${m}`, n > m); 6 return n > m ? -1 : 1; 7} 8 9console.log(arr.sort(judge)); // [5, 4, 3, 2, 1]
ソートの実行時、配列の先頭から「1,2」、「2,3」、「3,4」、「4,5」がそれぞれ「n,m」に渡されて比較が行われていると思っていましたが、予想とは逆で、mにインデックスが小さい数字 / nにインデックスが大きい数値 が格納されていました。
2 > 1 true 3 > 2 true 4 > 3 true 5 > 4 true [ 5, 4, 3, 2, 1 ]
インデックスが小さい順に第一引数、第二引数に値が渡されていると思っていたのですが、なぜ上記のような渡し方になっているのでしょうか?
初歩的な質問かもしれないですが、ご回答いただけると大変ありがたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー