配列の数値ソートの基本イメージ
arr.sort((a, b) => a – b) は、「配列を数値として正しく昇順に並べるための書き方」です。 JavaScript の sort() はそのまま使うと 文字列として比較するクセがあるため、数値を扱うときは必ず比較関数を渡す必要があります。
この比較関数こそが、初心者が最初につまずくポイントなので、ここを徹底的にかみ砕いて説明します。
なぜ比較関数が必要なのか(JavaScript の“文字列ソート問題”)
JavaScript の sort() は、何も指定しないと 文字列として比較します。
const arr = [10, 2, 5];
arr.sort();
console.log(arr); // ["10", "2", "5"] を辞書順で比較する
JavaScript辞書順とは、「1」「2」「5」のように文字として見たときの順番です。 そのため、数値として期待する「2, 5, 10」にはなりません。
ここで必要なのが、数値として比較するための関数です。
比較関数 (a, b) => a - b の意味を深掘りする
sort に渡す関数は、 「a と b を比べて、どちらを前に置くべきか」を決める役割を持ちます。
JavaScript のルールはこうです。
- 戻り値が 負の数 → a を b より前に置く
- 戻り値が 正の数 → a を b より後ろに置く
- 戻り値が 0 → 順番はそのまま
ここで (a, b) => a - b を使うと、 小さい数ほど前に、大きい数ほど後ろに並ぶようになります。
例で見ると分かりやすいです。
// a = 2, b = 5
a - b = -3 → 負 → 2 を前に
// a = 10, b = 2
a - b = 8 → 正 → 10 を後ろに
JavaScriptこの仕組みによって、昇順ソートが成立します。
昇順ソートの例
const arr = [10, 2, 5, 1];
arr.sort((a, b) => a - b);
console.log(arr); // [1, 2, 5, 10]
JavaScript内部では、要素同士を何度も比較しながら、 「小さい → 大きい」の順に並べ替えています。
降順ソートとの違い
昇順は a - b。 降順は比較を逆にして b - a。
const arr = [10, 2, 5, 1];
arr.sort((a, b) => b - a);
console.log(arr); // [10, 5, 2, 1]
JavaScript覚えるべきことはとてもシンプルです。
- 昇順 → a – b
- 降順 → b – a
この2つだけで、数値ソートはほぼ制覇できます。
sort の重要な性質:元の配列を書き換える
sort は 破壊的メソッドです。 つまり、元の配列そのものを並べ替えます。
const arr = [10, 2, 5];
const r = arr.sort((a, b) => a - b);
console.log(arr); // [2, 5, 10]
console.log(r); // [2, 5, 10](同じ配列)
JavaScript元の順番を残したい場合は、コピーしてからソートします。
const arr = [10, 2, 5];
const sorted = [...arr].sort((a, b) => a - b);
console.log(arr); // [10, 2, 5]
console.log(sorted); // [2, 5, 10]
JavaScriptスプレッド構文との組み合わせは、現場でもよく使われる安全な書き方です。
オブジェクト配列を数値でソートする応用例
数値ソートの考え方は、オブジェクト配列にもそのまま使えます。
const users = [
{ name: "Aki", score: 80 },
{ name: "Mika", score: 95 },
{ name: "Ken", score: 70 }
];
users.sort((a, b) => a.score - b.score);
console.log(users);
/*
[
{ name: "Ken", score: 70 },
{ name: "Aki", score: 80 },
{ name: "Mika", score: 95 }
]
*/
JavaScriptここでは、
- 比較対象を「要素そのもの」ではなく「score プロパティ」にする
a.score - b.scoreで昇順に並べる
という形になっています。
「どの数値を基準に並べたいか」を比較関数で指定する これがオブジェクトソートの本質です。
まとめ:(a, b) => a - b は数値ソートの“合言葉”
数値を正しく並べたいなら、 arr.sort((a, b) => a – b) をそのまま覚えてしまって構いません。
- JavaScript は比較関数なしだと文字列として並べる
- 数値ソートには必ず
(a, b) => a - b - 降順は
(b, a) => b - a - sort は元の配列を書き換えるので注意
- 必要ならコピーしてからソートする
このポイントを押さえるだけで、 あなたの配列操作は一気にプロレベルに近づきます。

