Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
- トップページ
- JavaScript辞典
- 配列.sort() / reverse()
配列.sort() / reverse()
配列の要素を並べ替え・反転するメソッドです。『sort()』は比較関数で順序を制御でき、『reverse()』は要素の順番を反転します。
構文
// 配列を並べ替えます。元の配列が変更されます。
配列.sort();
配列.sort(function(a, b) { return 比較結果; });
// 配列を反転します。元の配列が変更されます。
配列.reverse();
// 元の配列を変更せずに並べ替えた新しい配列を返します。
var newArray = 配列.toSorted(function(a, b) { return 比較結果; });
// 元の配列を変更せずに反転した新しい配列を返します。
var newArray = 配列.toReversed();
メソッド一覧
| メソッド | 概要 |
|---|---|
| sort(比較関数) | 配列の要素を並べ替えます。比較関数を省略するとUnicode順になります。元の配列が変更されます。 |
| reverse() | 配列の要素の順番を反転します。元の配列が変更されます。 |
| toSorted(比較関数) | 『sort()』と同じですが、元の配列を変更せず新しい配列を返します。ES2023で追加されました。 |
| toReversed() | 『reverse()』と同じですが、元の配列を変更せず新しい配列を返します。ES2023で追加されました。 |
サンプルコード
// 文字列の並べ替え
var fruits = ["バナナ", "りんご", "みかん"];
fruits.sort();
console.log(fruits); // 『バナナ,みかん,りんご』と出力されます。Unicode順です。
// 数値の並べ替え。比較関数が必要です。
var numbers = [10, 1, 21, 2];
numbers.sort(function(a, b) {
return a - b; // 昇順
});
console.log(numbers); // 『1,2,10,21』と出力されます。
// 降順にする場合
numbers.sort(function(a, b) {
return b - a;
});
console.log(numbers); // 『21,10,2,1』と出力されます。
// 配列を反転します。
var letters = ["A", "B", "C", "D"];
letters.reverse();
console.log(letters); // 『D,C,B,A』と出力されます。
// toSortedで元の配列を保持します。
var original = [3, 1, 4, 1, 5];
var sorted = original.toSorted(function(a, b) {
return a - b;
});
console.log(sorted); // 『1,1,3,4,5』と出力されます。
console.log(original); // 『3,1,4,1,5』と出力されます。元の配列は変わりません。
実行結果
["バナナ", "みかん", "りんご"] // sort()。Unicode順です。 [1, 2, 10, 21] // sort(a - b)。数値の昇順です。 [21, 10, 2, 1] // sort(b - a)。数値の降順です。 ["D", "C", "B", "A"] // reverse() [1, 1, 3, 4, 5] // toSorted() [3, 1, 4, 1, 5] // 元の配列は変わりません。
概要
『配列.sort()』は比較関数を省略すると、要素を文字列に変換してUnicode順で並べ替えます。数値の配列では『[10, 1, 21, 2]』が『[1, 10, 2, 21]』のように文字列順になってしまうため、数値を正しく並べ替えるには『function(a, b) { return a - b; }』のような比較関数が必要です。
比較関数は2つの引数を受け取り、戻り値が負なら第1引数が前に、正なら第2引数が前に、0なら順番が変わりません。昇順では『a - b』、降順では『b - a』を返すのが定番の書き方です。オブジェクトの配列を特定のプロパティで並べ替えたい場合にも同じ仕組みが使えます。
『配列.sort()』と『配列.reverse()』は元の配列を直接変更する破壊的メソッドです。元の配列を保持したい場合はES2023で追加された『toSorted()』『toReversed()』を使用するか、『配列.slice()』でコピーしてから並べ替えてください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。