Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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]
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away