JavaScriptの配列を効率的にループ処理する5つの方法

JavaScriptの配列ループJS
この記事は約11分で読めます。

 

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

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

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

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

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

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

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

●JavaScriptの配列とループ処理とは

JavaScriptにおいて、配列は非常に重要なデータ構造です。

配列を使うことで、複数のデータを1つの変数に格納し、効率的に管理することができます。

しかし、配列の真価を発揮するには、ループ処理が欠かせません。

○配列とは

配列とは、複数のデータを順序付けて格納するデータ構造のことです。

JavaScriptでは、1つの配列に異なるデータ型の値を格納することができます。

例えば、文字列や数値、さらには他の配列やオブジェクトなども含めることができるのです。

配列を使うことで、関連するデータをまとめて管理できるため、コードの可読性や保守性が向上します。

また、配列のインデックスを使ってデータにアクセスできるので、目的のデータを素早く取得することができます。

○ループ処理の重要性

配列の本当の力を引き出すには、ループ処理が重要になります。

ループ処理を使うことで、配列内の各要素に対して同じ処理を繰り返し実行できるのです。

例えば、配列内の全ての要素を表示したい場合、ループ処理を使わずに1つずつ要素にアクセスするのは非常に手間がかかります。

しかし、ループ処理を使えば、数行のコードで配列内の全ての要素を処理できるのです。

ループ処理は、配列の要素を検索したり、特定の条件に合致する要素を抽出したりする際にも威力を発揮します。

さらに、配列の要素を加工して新しい配列を作成するような処理にも、ループ処理は欠かせません。

●for文を使った配列のループ処理

JavaScriptで配列をループ処理する方法の1つに、for文があります。for文は、指定した回数だけ処理を繰り返すための構文です。

配列のループ処理では、配列の要素数だけ処理を繰り返すことができるので、非常に便利ですよね。

○for文の構文

for文の構文は、次のようになります。

for (初期化式; 条件式; 増分式) {
  // 繰り返し処理
}

初期化式では、ループ変数の初期値を設定します。

条件式では、ループを続行するための条件を指定します。増分式では、ループ変数の値を更新します。

配列のループ処理では、初期化式でループ変数を0に設定し、条件式で配列の長さ未満である限りループを続行するように指定します。

増分式では、ループ変数を1ずつ増やしていきます。

○サンプルコード1:for文を使った配列の要素の出力

それでは、for文を使って配列の要素を出力するサンプルコードを見てみましょう。

const fruits = ['りんご', 'バナナ', 'オレンジ'];

for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

実行結果は次のようになります。

りんご
バナナ
オレンジ

このコードでは、fruitsという配列を定義し、for文を使ってループ処理を行っています。

ループ変数iは0から始まり、fruits.length(配列の長さ)より小さい間、1ずつ増加します。

ループ内では、fruits[i]という記述で、配列のi番目の要素にアクセスしています。

これにより、配列の要素を順番に出力することができます。

○サンプルコード2:for文を使った配列の要素の合計値の計算

for文を使って、配列の要素の合計値を計算するサンプルコードを見てみましょう。

const numbers = [1, 2, 3, 4, 5];
let sum = 0;

for (let i = 0; i < numbers.length; i++) {
  sum += numbers[i];
}

console.log(sum);

実行結果は次のようになります。

15

このコードでは、numbersという数値の配列を定義し、sumという変数を0で初期化しています。

for文を使ってループ処理を行い、ループ内でsum += numbers[i]という計算を行っています。

これは、sumにnumbers[i]の値を加算するという意味です。

ループが終了すると、sumには配列の全ての要素の合計値が格納されます。

最後にconsole.log(sum)で合計値を出力しています。

for文を使った配列のループ処理は、シンプルで理解しやすいのが特徴です。

配列の要素を順番にアクセスしたり、要素の値を使って計算したりするのに適しています。

ただ、for文では配列のインデックスを手動で管理する必要があるので、少しわかりにくいと思いますが、慣れると使い勝手が良いループ処理の方法だと思います。

●for…of文を使った配列のループ処理

JavaScriptには、for…of文という比較的新しいループ構文があります。

for…of文は、配列やイテラブルオブジェクトの要素を簡単にループ処理できる便利な構文ですね。

ES2015で導入されたfor…of文は、配列をより直感的にループ処理できるようになりました。

for文と比べると、ループ変数を手動で管理する必要がないので、コードがスッキリと読みやすくなるのが特徴です。

○for…of文の構文

for…of文の構文は、次のようになります。

for (変数 of 配列やイテラブルオブジェクト) {
  // 繰り返し処理
}

変数には、配列やイテラブルオブジェクトの各要素が順番に代入されます。

ループ内では、その変数を使って要素にアクセスできます。

○サンプルコード3:for…of文を使った配列の要素の出力

それでは、for…of文を使って配列の要素を出力するサンプルコードを見てみましょう。

const fruits = ['りんご', 'バナナ', 'オレンジ'];

for (const fruit of fruits) {
  console.log(fruit);
}

実行結果は次のようになります。

りんご
バナナ
オレンジ

このコードでは、fruitsという配列をfor…of文でループ処理しています。

ループ変数fruitには、配列の各要素が順番に代入されます。

ループ内では、console.log(fruit)で要素を出力しています。

for文と比べると、配列のインデックスを意識する必要がないので、とてもシンプルに書けますね。

○for…of文とfor文の違い

for…of文とfor文の主な違いは、次のようなところがあります。

  • for…of文では、配列のインデックスを手動で管理する必要がない
  • for…of文では、配列の要素が直接ループ変数に代入される
  • for…of文では、配列以外のイテラブルオブジェクトもループ処理できる

for…of文は、配列のループ処理を簡潔に書けるので、コードの可読性が向上します。

また、配列以外にもStringやMap、Setなどのイテラブルオブジェクトに対しても使えるので、汎用性が高いのも魅力ですね。

ただ、for…of文ではインデックスを直接取得できないので、インデックスが必要な場合はfor文を使う必要があります。

使い分けが大切だと思います。

for…of文は、モダンなJavaScriptらしい書き方ができるので、ぜひ覚えておきたい構文ですね。

●forEachメソッドを使った配列のループ処理

JavaScriptには、配列のループ処理を簡潔に書くための便利なメソッドがあります。その1つが、forEachメソッドです。

forEachメソッドを使うと、配列の各要素に対して特定の処理を実行できるんです。

forEachメソッドは、配列の要素を1つずつ取り出して、指定したコールバック関数を呼び出してくれます。

コールバック関数の中で、配列の要素に対して行いたい処理を記述します。

○forEachメソッドの構文

forEachメソッドの構文は、次のようになります。

配列.forEach(コールバック関数(要素, インデックス, 配列) {
  // 処理
});

コールバック関数の引数には、現在の要素、そのインデックス、および元の配列が渡されます。

インデックスと配列は省略可能で、必要な場合のみ使用します。

○サンプルコード4:forEachメソッドを使った配列の要素の出力

それでは、forEachメソッドを使って配列の要素を出力するサンプルコードを見てみましょう。

const fruits = ['りんご', 'バナナ', 'オレンジ'];

fruits.forEach(function(fruit) {
  console.log(fruit);
});

実行結果は次のようになります。

りんご
バナナ
オレンジ

このコードでは、fruitsという配列に対してforEachメソッドを呼び出しています。

コールバック関数には、配列の各要素が順番に渡されます。

コールバック関数の中では、console.log(fruit)で要素を出力しています。

forEachメソッドを使うと、配列のインデックスを意識せずに、各要素に対して処理を実行できるんです。

○サンプルコード5:forEachメソッドを使った配列の要素の処理

forEachメソッドを使って、配列の要素を加工するサンプルコードを見てみましょう。

const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = [];

numbers.forEach(function(number) {
  const squared = number ** 2;
  squaredNumbers.push(squared);
});

console.log(squaredNumbers);

実行結果は次のようになります。

[1, 4, 9, 16, 25]

このコードでは、numbersという数値の配列に対してforEachメソッドを呼び出しています。

コールバック関数の中では、各要素を2乗した値を計算し、新しい配列squaredNumbersにpushしています。

最終的に、squaredNumbersには元の配列の要素を2乗した値が格納されます。

forEachメソッドを使うことで、配列の要素を加工して新しい配列を作成するのも簡単になります。

●よくあるエラーと対処法

JavaScriptで配列のループ処理を行う際、初心者の方はエラーに遭遇することがあるかもしれません。

エラーメッセージを見ても、何が原因なのかわからず、途方に暮れてしまうこともあるでしょう。

そこで、配列のループ処理でよく発生するエラーと、その対処法について見ていきましょう。

エラーの原因を理解し、適切に対処できるようになることが、JavaScriptのスキルアップにつながります。

○TypeError: Cannot read property ‘length’ of undefined

このエラーは、存在しない配列や、未定義の変数に対してループ処理を行おうとした場合に発生します。

let numbers;
for (let i = 0; i < numbers.length; i++) {
  console.log(numbers[i]);
}

上記のコードでは、numbersが未定義の状態でループ処理を行おうとしているため、エラーが発生します。

対処法としては、事前に配列が存在することを確認し、適切な初期化を行うことが大切です。

let numbers = [1, 2, 3];
if (numbers && numbers.length) {
  for (let i = 0; i < numbers.length; i++) {
    console.log(numbers[i]);
  }
}

このように、配列の存在チェックとループ処理を行うことで、エラーを回避できます。

○TypeError: Cannot read property ‘0’ of undefined

このエラーは、存在しない配列や、未定義の変数に対して、インデックスを使用して要素にアクセスしようとした場合に発生します。

let numbers;
console.log(numbers[0]);

上記のコードでは、numbersが未定義の状態で、インデックスを使用して要素にアクセスしようとしているため、エラーが発生します。

対処法としては、事前に配列が存在することを確認し、適切な初期化を行うことが大切です。

let numbers = [1, 2, 3];
if (numbers && numbers.length) {
  console.log(numbers[0]);
}

このように、配列の存在チェックと要素へのアクセスを行うことで、エラーを回避できます。

まとめ

JavaScriptの配列をループ処理する方法として、for文、for…of文、forEachメソッドについて詳しく解説してきました。

それぞれの方法には特徴があり、状況に応じて使い分けることが大切ですね。

配列のループ処理は、JavaScriptプログラミングにおいて非常に重要なスキルです。今回紹介した3つの方法を理解し、適切に使いこなせるようになれば、より効率的で可読性の高いコードを書くことができるでしょう。

また、配列のループ処理を行う際には、エラーに遭遇することもあります。

エラーメッセージを理解し、原因を突き止められるようになることが、JavaScriptのスキルアップにつながります。

この記事が、皆さんのJavaScriptプログラミングの助けになれば幸いです。

配列のループ処理に自信を持って取り組めるようになることを願っています。

最後までお読みいただき、ありがとうございました。