JavaScript入門 練習問題 30:配列メソッド:sortメソッドの既定の並び替え基準
次のコードの実行結果として正しいものはどれですか?
```javascript
const numbers = [10, 1, 21, 2];
numbers.sort();
console.log(numbers);
```
- [1, 2, 10, 21]という数値順の配列になる
- [1, 10, 2, 21]という文字列順の配列になる
- [10, 1, 21, 2]という元の順序のままになる
- [2, 1, 21, 10]という降順の配列になる
- [21, 10, 2, 1]という降順の配列になる
正解と解説を見る
正解:[1, 10, 2, 21]という文字列順の配列になる
sort()メソッドは、比較関数を指定しない場合、要素を文字列に変換してUnicodeのコードポイント順(辞書順)に並び替えます。そのため数値配列でも直感的な数値順にはなりません。
【正解の理由】
各要素を文字列として比較すると、'1'は'10'や'2'より小さく、'10'は'2'より小さいと判定されるため、[1, 10, 2, 21]という順序になります。
【不正解の理由】
• 「数値順の配列になる」:比較関数を指定しない場合、sort()は数値としてではなく文字列として比較するため、この結果にはならない
• 「元の順序のままになる」:sort()は破壊的メソッドであり、呼び出すと必ず配列の要素の並びが変更される
• 「降順の配列になる」(2つ):比較関数を指定しない場合のsort()は基本的に昇順(文字列としての辞書順)に並べ替えるため、これらの降順の結果にはならない