JavaScriptで理解しやすい並び替えをマスター!10のサンプルコードと使い方で完全網羅

JavaScriptで並び替えを行うサンプルコードJS
この記事は約10分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、JavaScriptでの並び替えが簡単にできるようになります。

JavaScript初心者でも理解しやすい並び替えの方法を徹底解説しています。

サンプルコードを使って具体的な使い方や注意点、カスタマイズ方法も紹介しているので、ぜひ参考にしてみてください。

●JavaScriptでの並び替えとは

JavaScriptでの並び替えは、データの整理や表示を行う際に非常に役立ちます。

しかし、初心者にとっては理解しづらい部分もあるため、この記事ではJavaScript初心者向けに並び替えの方法を分かりやすく解説していきます。

主に、配列とオブジェクトの並び替えについて説明していきます。

○配列の並び替え

配列は、複数のデータを順番に格納するためのデータ構造です。JavaScriptでは、配列の並び替えには主に sort() メソッドを使用します。

sort() メソッドは、デフォルトでは文字列として昇順に並び替えを行いますが、引数に並び替え条件を指定することで、数値の昇順や降順、文字列の降順など、様々な並び替えを行うことができます。

○オブジェクトの並び替え

オブジェクトは、キーと値の組み合わせでデータを格納するデータ構造です。

JavaScriptでは、オブジェクト自体を並び替えることはできませんが、オブジェクトのキーと値を別の配列にコピーし、その配列を並び替えることで、オブジェクトの並び替えを行うことができます。

●JavaScriptの並び替えの使い方

ここでは、JavaScriptでの並び替え方法を配列とオブジェクトに分けて、具体的なサンプルコードを使って解説していきます。

それぞれのサンプルコードを確認しながら、実際にどのように並び替えが行われるのかを理解していきましょう。

○配列の並び替えサンプルコード1:数値の昇順

下記のサンプルコードでは、数値の配列を昇順に並び替えています。

let numbers = [10, 5, 8, 1, 7];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 7, 8, 10]

sort()メソッドに引数として比較関数((a, b) => a - b)を指定することで、数値の昇順に並び替えが行われます。

○配列の並び替えサンプルコード2:数値の降順

下記のサンプルコードでは、数値の配列を降順に並び替えています。

let numbers = [10, 5, 8, 1, 7];
numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 8, 7, 5, 1]

sort()メソッドに引数として比較関数((a, b) => b - a)を指定することで、数値の降順に並び替えが行われます。

○配列の並び替えサンプルコード3:文字列の昇順

下記のサンプルコードでは、文字列の配列を昇順に並び替えています。

let fruits = ["apple", "banana", "cherry", "grape", "orange"];
fruits.sort();
console.log(fruits); // ["apple", "banana", "cherry", "grape", "orange"]

sort()メソッドを引数なしで使用することで、文字列の昇順に並び替えが行われます。

○配列の並び替えサンプルコード4:文字列の降順

下記のサンプルコードでは、文字列の配列を降順に並び替えています。

let fruits = ["apple", "banana", "cherry", "grape", "orange"];
fruits.sort().reverse();
console.log(fruits); // ["orange", "grape", "cherry", "banana", "apple"]

sort()メソッドで昇順に並び替えた後、reverse()メソッドを使って配列の要素を逆順に並べ替えることで、文字列の降順に並び替えが行われます。

○オブジェクトの並び替えサンプルコード1:キーの昇順

下記のサンプルコードでは、オブジェクトのキーを昇順に並び替えています。

let obj = { banana: 3, apple: 5, cherry: 2, orange: 4, grape: 1 };
let sortedKeys = Object.keys(obj).sort();
let sortedObj = {};
sortedKeys.forEach(key => {
  sortedObj[key] = obj[key];
});
console.log(sortedObj);
// { apple: 5, banana: 3, cherry: 2, grape: 1, orange: 4 }

Object.keys()メソッドでオブジェクトのキーを取得し、sort()メソッドでキーを昇順に並び替えます。

その後、新しいオブジェクトに昇順に並び替えたキーとそれに対応する値を格納していきます。

○オブジェクトの並び替えサンプルコード2:キーの降順

下記のサンプルコードでは、オブジェクトのキーを降順に並び替えています。

let obj = { banana: 3, apple: 5, cherry: 2, orange: 4, grape: 1 };
let sortedKeys = Object.keys(obj).sort().reverse();
let sortedObj = {};
sortedKeys.forEach(key => {
  sortedObj[key] = obj[key];
});
console.log(sortedObj);
// { orange: 4, grape: 1, cherry: 2, banana: 3, apple: 5 }

Object.keys()メソッドでオブジェクトのキーを取得し、sort()メソッドでキーを昇順に並び替えた後、reverse()メソッドでキーを降順に並び替えます。

その後、新しいオブジェクトに降順に並び替えたキーとそれに対応する値を格納していきます。

○オブジェクトの並び替えサンプルコード3:値の昇順

下記のサンプルコードでは、オブジェクトの値を昇順に並び替えています。

let obj = { banana: 3, apple: 5, cherry: 2, orange: 4, grape: 1 };
let sortedEntries = Object.entries(obj).sort((a, b) => a[1] - b[1]);
let sortedObj = {};
sortedEntries.forEach(entry => {
  sortedObj[entry[0]] = entry[1];
});
console.log(sortedObj);
// { grape: 1, cherry: 2, banana: 3, orange: 4, apple: 5 }

Object.entries()メソッドでオブジェクトのキーと値をペアにした配列を取得し、sort()メソッドに引数として比較関数((a, b) => a[1] - b[1])を指定することで、値の昇順に並び替えが行われます。

その後、新しいオブジェクトに昇順に並び替えたキーとそれに対応する値を格納していきます。

○オブジェクトの並び替えサンプルコード4:値の降順

下記のサンプルコードでは、オブジェクトの値を降順に並び替えています。

let obj = { banana: 3, apple: 5, cherry: 2, orange: 4, grape: 1 };
let sortedEntries = Object.entries(obj).sort((a, b) => b[1] - a[1]);
let sortedObj = {};
sortedEntries.forEach(entry => {
  sortedObj[entry[0]] = entry[1];
});
console.log(sortedObj);
// { apple: 5, orange: 4, banana: 3, cherry: 2, grape: 1 }

Object.entries()メソッドでオブジェクトのキーと値をペアにした配列を取得し、sort()メソッドに引数として比較関数((a, b) => b[1] - a[1])を指定することで、値の降順に並び替えが行われます。

その後、新しいオブジェクトに降順に並び替えたキーとそれに対応する値を格納していきます。

●注意点と対処法

JavaScriptにおける並び替え処理にはいくつかの注意点があります。

下記でそれらについて説明し、対処法を提供します。

○ソートの安定性

JavaScriptのArray.prototype.sort()メソッドはソートアルゴリズムが実装依存であるため、安定性が保証されません。

これは、並び替えの前後で同じ値の要素の順序が変わることがあるということです。

対処法として、ソート関数にオリジナルのインデックスを追加して比較することで安定性を確保できます。

○sort()メソッドのデフォルトの挙動

デフォルトでは、sort()メソッドは要素を文字列に変換し、それらの文字列の順序に基づいてソートされます。

数値の配列をソートする場合、これは意図しない結果をもたらすことがあります。

対処法として、ソート関数を明示的に指定して数値を正しくソートできるようにします。

○サンプルコード9:条件式をカスタマイズ

下記のサンプルコードでは、偶数と奇数を分けて並び替えるカスタマイズを行っています。

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.sort((a, b) => {
  if (a % 2 === b % 2) {
    return a - b;
  }
  return a % 2 - b % 2;
});
console.log(arr);
// [2, 4, 6, 8, 1, 3, 5, 7, 9]

○サンプルコード10:独自の並び替え関数を作成

下記のサンプルコードでは、独自の並び替え関数を作成し、配列をソートしています。

function customSort(arr, compareFunc) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (compareFunc(arr[i], arr[j]) > 0) {
        [arr[i], arr[j]] = [arr[j], arr[i]];
      }
    }
  }
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
customSort(arr, (a, b) => {
  // ここで独自の比較ロジックを実装
  if (a % 2 === b % 2) {
    return a - b;
  }
  return a % 2 - b % 2;
});
console.log(arr);
// [2, 4, 6, 8, 1, 3, 5, 7, 9]

このサンプルコードでは、customSort関数を作成し、配列arrと比較関数compareFuncを引数に渡しています。

このcompareFuncで独自の比較ロジックを実装することができ、今回は偶数と奇数を分けて昇順に並び替えています。

まとめ

JavaScriptで並び替えを行う際には、配列のsort()メソッドやオブジェクトのキーと値を使って並び替える方法があります。

また、カスタマイズ方法として条件式を変更したり、独自の並び替え関数を作成することができます。

ただし、ソートの安定性やデフォルトの挙動に注意して、適切な対処法を用いることが重要です。

これらの方法を活用して、効率的な並び替えを実現しましょう。