IT1-CODE-POCKET

JavaScriptの配列・条件分岐・繰り返し

JavaScriptはWeb制作で使われる言語ですが、配列や繰り返しの考え方は情報Ⅰのアルゴリズム学習にも役立ちます。

配列とlength

JavaScriptでは、複数の値をまとめるときに配列を使います。nums = [4, 7, 2] のような形で値を並べ、nums[0] が最初の値、nums[1] が2番目の値になります。PythonやDNCLと同じく、添字は0から始まります。

配列の要素数は nums.length で取得します。共通テスト形式の問題では、最後の添字が nums.length - 1 になる点が重要です。隣り合う値を比較するときは nums[i + 1] を使うため、i を最後まで進めると範囲外を参照してしまいます。

if文と条件式

JavaScriptの条件分岐は if (条件) { ... } の形で書きます。条件が真のときだけ、波かっこの中の処理が実行されます。例えば if (score >= 60) は、score が60以上のときにだけ実行されます。

複数の条件を同時に満たす場合は &&、どちらかを満たせばよい場合は || を使います。問題を解くときは、記号をそのまま眺めるより、「かつ」「または」と日本語に直すと読みやすくなります。

for文の読み方

JavaScriptの代表的な繰り返しは for (let i = 0; i < nums.length; i++) です。これは「iを0から始め、nums.lengthより小さい間、iを1ずつ増やす」という意味です。配列の全要素を添字で順に調べるときによく使います。

配列の値そのものを順番に取り出す場合は for (const n of nums) のように書くこともあります。添字が必要な問題では通常のfor文、値だけ見ればよい問題ではfor...ofが読みやすい、という違いがあります。

集計・最大値・抽出

合計を求めるときは、total のような変数を0から始め、条件に合う値を足していきます。最大値を求めるときは、仮の最大値を置き、より大きい値が出たら更新します。JavaScriptでは Math.max(...nums) のような書き方もありますが、共通テスト対策では「更新の流れ」を読めることが大切です。

また、条件を満たす要素だけを取り出すときは filter が使われます。例えば nums.filter(n => n % 2 == 0) は、偶数だけを残します。関数の形に慣れていなくても、「条件に合うものだけを残す」と考えると読みやすくなります。

for文の3つの部分を分けて読む

JavaScript の for 文は、かっこの中に3つの部分がセミコロンで区切られて入っています。 まとめて読もうとすると難しく見えますが、分けて読めば単純です。

for (let i = 0; i < nums.length; i++) {
      ↑          ↑              ↑
     ①開始      ②続ける条件    ③1周ごとの変化
}
書き方 i がとる値 回数
i = 0; i < 5; i++ 0, 1, 2, 3, 4 5回
i = 0; i <= 5; i++ 0, 1, 2, 3, 4, 5 6回
i = 1; i < 5; i++ 1, 2, 3, 4 4回
i = 0; i < nums.length; i++ 0 〜 要素数-1 要素数と同じ

<<=回数が1回変わります。 共通テスト用プログラム表記の「0 から 5 まで」は両端を含むので、 JavaScript では i <= 5 にあたります。表記による違いを意識してください。

コード例と実行結果

頻出の処理を、実際のコードと出力で確認します。

合計と個数を同時に求める

const nums = [1, 4, 6, 7, 10];
let total = 0;
let count = 0;

for (let i = 0; i < nums.length; i++) {
  total = total + nums[i];
  if (nums[i] % 2 === 0) {
    count = count + 1;
  }
}
console.log(total, count);   // 28 3

最大値とその位置を求める

const nums = [4, 9, 2, 7];
let mx = nums[0];
let mxPos = 0;

for (let i = 0; i < nums.length; i++) {
  if (nums[i] > mx) {
    mx = nums[i];
    mxPos = i;
  }
}
console.log(mx, mxPos);      // 9 1

隣どうしを比べる

const nums = [3, 7, 10];
let up = 0;

for (let i = 0; i < nums.length - 1; i++) {
  if (nums[i] < nums[i + 1]) {
    up = up + 1;
  }
}
console.log(up);             // 2

3つ目の例で、繰り返しの条件が nums.length - 1 になっている点に注目してください。 nums[i + 1] を使うので、i を最後まで進めると範囲外になります。 隣どうしの比較では必ず1つ手前で止めます。詳しくは 繰り返しの回数を数えるで扱っています。

JavaScript特有のつまずき

つまずき 内容
= と == と === = は代入、===== は比較。比較は === を使うのが基本
let と const 値が変わる変数は let、変わらないものは const
割り算 7 / 2 は 3.5。整数にするには Math.floor(7 / 2)
波かっこの範囲 { } がどこまでかで、if の内側か外側かが変わる
&& と || 「かつ」は &&、「または」は ||

Python がインデントで処理のまとまりを表すのに対し、JavaScript は波かっこで表します。 見た目が違うだけで、意味は同じです。 擬似言語の も、同じく「まとまり」を示す記号です。 3つの表記は書き方が違うだけで、処理の構造は共通だと押さえてください。

次に読むページ