LoginSignup
5
1

More than 3 years have passed since last update.

JavaScriptのソートを使うと9より80が先にくる

Last updated at Posted at 2019-07-20

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]
5
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1