Skip to content
Playground

5.配列とループ

学習目標

  • 配列を使って複数の値をまとめて管理できる
  • 配列とループを組み合わせて、全要素に対する処理(合計、最大値など)を書ける

ここまでの変数は1つの値しか入れられませんでした。しかし実際のプログラムでは「5人分の点数」「商品リスト」「曜日の一覧」のように、同じ種類のデータをまとめて扱う場面が多くあります。配列 はこのような場面で使うデータ構造です。

5人分のテストの点数を管理する場合、変数を5つ用意する方法が考えられます。

arrays.js
const score1 = 80;
const score2 = 65;
const score3 = 90;
const score4 = 70;
const score5 = 85;

しかし、人数が50人になれば変数が50個必要です。「全員の合計を計算する」処理も、50個の変数を1つずつ足していくことになります。

配列を使えば、これらの値を1つの変数にまとめて入れられます。

const 変数名 = [値1, 値2, 値3, ...];
arrays.js
const scores = [80, 65, 90, 70, 85];
console.log(scores); // [80, 65, 90, 70, 85]

[] の中にカンマで区切って値を並べます。これで scores という1つの変数に5つの値が入りました。配列には文字列など、どのデータ型の値でも入れられます。

arrays.js
const colors = ["", "", "", ""];

配列の各要素には 0 から始まる番号がついています。この番号をインデックスと呼びます。たとえば scores 配列の場合、各要素とインデックスの対応は次のようになります。

インデックス01234
要素8065907085

要素にアクセスするには 配列名[インデックス] と書きます。

arrays.js
const scores = [80, 65, 90, 70, 85];
console.log(scores[0]); // 80
console.log(scores[1]); // 65
console.log(scores[2]); // 90
console.log(scores[3]); // 70
console.log(scores[4]); // 85

.length で配列の要素数を取得できます。

arrays.js
const scores = [80, 65, 90, 70, 85];
console.log(scores.length); // 5

.push() で配列の末尾に要素を追加できます。

arrays.js
const scores = [80, 65, 90];
console.log(scores.length); // 3
scores.push(70);
scores.push(85);
console.log(scores); // [80, 65, 90, 70, 85]
console.log(scores.length); // 5

配列とループを組み合わせると、全要素に対して同じ処理を行えます。ここでは全要素の出力、合計の計算、条件による絞り込み、最大値の探索を扱います。

for ループの変数 i を配列のインデックスとして使うと、全要素に順番にアクセスできます。

arrays.js
const colors = ["", "", "", ""];
for (let i = 0; i < colors.length; i++) {
console.log(colors[i]);
}
icolors[i]
0"赤"
1"青"
2"緑"
3"黄"

icolors.length(4)に達するとループが終了します。

配列の全要素を足し合わせて合計値を求めます。合計を保持する変数 sum を用意し、ループで各要素を順に足していきます。

arrays.js
const scores = [80, 65, 90, 70, 85];
let sum = 0;
for (let i = 0; i < scores.length; i++) {
sum = sum + scores[i];
}
console.log(sum); // 390

ループ: 合計値の計算では sum = sum + ii を足していました。ここでは sum = sum + scores[i] で、i 番目の要素を足しています。

iscores[i]sum + scores[i]sum
0800 + 8080
16580 + 65145
290145 + 90235
370235 + 70305
485305 + 85390

ループの中で各要素を比較すると、条件を満たす要素だけを処理できます。次のプログラムは、80 点以上の点数だけを出力します。

arrays.js
const scores = [80, 65, 90, 70, 85];
for (let i = 0; i < scores.length; i++) {
if (scores[i] >= 80) {
console.log(scores[i]);
}
}
80
90
85

scores[i] >= 80 は各要素を 80 と比較し、80 以上かどうかを判定しています。条件を満たす要素だけが出力されます。

iscores[i]scores[i] >= 80出力
080true80
165false
290true90
370false
485true85

ループの中で各要素を暫定の最大値と比較すると、配列全体の最大値を見つけることができます。この処理は次の手順で実現します。

  1. 暫定の最大値を決める — 比較の基準が必要なので、最初の要素 numbers[0]max に代入します。

  2. 各要素と max を比較する — 2番目以降の要素を順に max と比較し、max より大きい要素が見つかったら max を更新します。if (numbers[i] > max) がこの比較にあたります。

  3. ループ終了時に max が最大値 — すべての要素と比較し終えると、max には配列全体で最も大きい値が残っています。

arrays.js
const numbers = [34, 72, 15, 88, 43];
let max = numbers[0];
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
console.log(max); // 88

max の変化をトレースします。

inumbers[i]numbers[i] > maxmax
34
172true72
215false72
388true88
443false88

maxnumbers[0] で初期化されているので、numbers[0]max を比較しても結果は変わりません。そのためループは i = 1 から始めています。