Menu
Coddy logo textTech

Sortメソッド

CoddyのJavaScriptジャーニー「論理とフロー」セクションの一部 — レッスン 57/65。

sort() メソッドを使用すると、配列の要素を元の配列内で直接(in place)ソートし、ソートされた配列を返します。デフォルトでは、要素を文字列としてアルファベットの昇順でソートします。

基本的な構文は次のとおりです:

array.sort([compareFunction])

比較関数を使用しない例:

const fruits = ['banana', 'apple', 'orange', 'mango'];
fruits.sort();
console.log(fruits);
// ['apple', 'banana', 'mango', 'orange']

警告: 比較関数を指定しない場合、数値は期待通りにソートされません:

const numbers = [1, 30, 4, 21, 100000];
numbers.sort();
console.log(numbers);
// [1, 100000, 21, 30, 4] (不正確な数値ソート)

数値を正しくソートしたり、カスタムソートを実装したりするには、比較関数を使用する必要があります。

比較関数は以下を返す必要があります:

  • a が b より前に来るべき場合は負の値
  • b が a より前に来るべき場合は正の値
  • それらが等しい場合は 0

比較関数を使用して数値をソートする方法は次のとおりです。

// 昇順
const numbers = [1, 30, 4, 21, 100000];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 4, 21, 30, 100000]
// 降順
numbers.sort((a, b) => b - a);
console.log(numbers); // [100000, 30, 21, 4, 1]

オブジェクトをソートする別の例:

const people = [
    { name: 'John', age: 30 },
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 35 }
];

// 年齢でソート(昇順)
people.sort((a, b) => a.age - b.age);
// 名前でソート(アルファベット順に localeCompare() を使用)
people.sort((a, b) => a.name.localeCompare(b.name));
challenge icon

チャレンジ

簡単

文字列の配列を受け取り、それらの文字列を長さの昇順でソートした新しい配列を返す、sortByLength という名前の関数を作成してください。2つの文字列が同じ長さの場合は、アルファベット順にソートする必要があります。

チートシート

sort() メソッドは、配列の要素をインプレース(元の配列を変更)でソートし、ソートされた配列を返します。デフォルトでは、要素を文字列としてアルファベット順にソートします。

基本構文:

array.sort([compareFunction])

文字列のソート:

const fruits = ['banana', 'apple', 'orange', 'mango'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'mango', 'orange']

警告: 比較関数がない場合、数値は正しくソートされません:

const numbers = [1, 30, 4, 21, 100000];
numbers.sort();
console.log(numbers); // [1, 100000, 21, 30, 4] (incorrect)

比較関数の戻り値:

  • a を b より前に配置する場合は負の値
  • b を a より前に配置する場合は正の値
  • 等しい場合は 0

数値を正しくソートする:

// 昇順
numbers.sort((a, b) => a - b);

// 降順
numbers.sort((a, b) => b - a);

オブジェクトのソート:

const people = [
    { name: 'John', age: 30 },
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 35 }
];

// 年齢でソート
people.sort((a, b) => a.age - b.age);

// 名前でアルファベット順にソート
people.sort((a, b) => a.name.localeCompare(b.name));

自分で試してみよう

function sortByLength(arr) {
    return arr.sort((a, b) => {
        // ここにコードを記述してください
    })
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン