JavaScriptで配列の要素を並び替えたい場合、sort()
メソッドを使用します。今回は、sort()
の基本的な使い方から使用時の注意点までをまとめていきたいと思います。
目次 非表示
sort()
メソッドは、配列の要素を並び替えるためのメソッドです。デフォルトでは、文字列として昇順で並び替えます。
JavaScript
array.sort([compareFunction]);
パラメータ | 説明 |
---|---|
compareFunction | (省略可能)並び替えのルールを指定する関数 |
JavaScript
const drinks = ['white mocha', 'espresso', 'cappuccino', 'americano'];
drinks.sort();
console.log(drinks); // americano, cappuccino, espresso, white mocha
sort()
は、配列の要素を 文字列として昇順にソートして、console.log
に表示します。
JavaScript
const numbers = [40, 1, 5, 200];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 40, 200]
sort()
のデフォルト動作では数値が文字列として扱われるため、意図しない順序になります。
JavaScript
console.log([40, 1, 5, 200].sort()); // [1, 200, 40, 5](意図しない結果)
compareFunction
を a - b
にすることで、
a - b
が負の値なら、a
をb
より前に配置a - b
が正の値なら、b
をa
より前に配置
JavaScript
const numbers = [40, 1, 5, 200];
numbers.sort((a, b) => b - a);
console.log(numbers); // [200, 40, 5, 1]
JavaScript
const users = [
{ name: 'Alex', age: 25 },
{ name: 'Jordan', age: 30 },
{ name: 'Taylor', age: 20 }
];
users.sort((a, b) => a.age - b.age);
console.log(users);
[// [object Object]
{
"name": "Taylor",
"age": 20
},// [object Object]
{
"name": "Alex",
"age": 25
},// [object Object]
{
"name": "Jordan",
"age": 30
}]
a.age - b.age
を比較し、年齢が小さい順に並び替えて、console.log
に20
→ 25
→ 30
の順で表示される。
JavaScript
const users = [
{ name: 'Alex', age: 25 },
{ name: 'Jordan', age: 30 },
{ name: 'Taylor', age: 20 }
];
users.sort((a, b) => a.name.localeCompare(b.name));
console.log(users);
[// [object Object]
{
"name": "Alex",
"age": 25
},// [object Object]
{
"name": "Jordan",
"age": 30
},// [object Object]
{
"name": "Taylor",
"age": 20
}]
localeCompare()
を使うと文字列の比較が適切に行われるので、console.log
にAlex
→ Jordan
→ Taylor
の順で表示される。
sort()
は元の配列を変更するため、ソート前の順番を保持したい場合はコピーを作成してから実行する。
JavaScript
const numbers = [10, 5, 8, 1];
const sortedNumbers = [...numbers].sort((a, b) => a - b);
console.log(numbers); // [10, 5, 8, 1](元の配列は変更されない)
console.log(sortedNumbers); // [1, 5, 8, 10](ソートされた新しい配列)
数値を並び替える場合は、必ず比較関数(a, b) => a - b
を指定しましょう。
sort()
は 配列を並び替えるメソッドで、デフォルトでは文字列として昇順にソート- 数値のソートには比較関数
(a, b) => a - b
を指定する必要がある - オブジェクトのソートには
localeCompare()
やプロパティの比較を使う sort()
は元の配列を変更する(破壊的処理)なので、元の配列を残したい場合はコピーを作成