JSのソートについて調べる機会があったのですが、仕様を全然把握していなかったので、勉強がてらまとめました。
javascriptのソートについて
ソートについてArray.prototype.sort()をみてみると、どうやら数字ではなく文字列に変換したものを比較するらしい。
compareFunction (比較関数) が与えられなかった場合、要素はそれぞれの文字列に変換したものを比較して辞書 (あるいは電話帳。数的でない) 順にソートされます。例えば、"80" は辞書順では "9" の前に来ますが、数的なソートでは 9 が 80 の前に来ます。
そのため、8と90の配列をソートする結果が下記のようになる。
let array = [9, 80];
array.sort()
// (2) [80, 9]
数字としてソートしたい場合には?
公式からの引用ですが、これ1発でいけた!
function compareNumbers(a, b) {
return a - b;
}
numberArray.sort(compareNumbers);
// クロージャ使うパターン
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]