forループは、何らかの処理を繰り返し実行するためによく使われる文のひとつです。
JavaScriptでは、forキーワード、丸括弧(())で囲まれた_ヘッダー_、そして波括弧({})で囲まれたループの_本体_を含むコードブロックから構成されます。
for (initialization; condition; step) {
// code that is executed repeatedly as long as the condition is true
}
初期化では通常カウンター変数を用意し、条件はループを続けるか止めるかを判定し、ステップは各繰り返しの最後にカウンターを増やします。 ヘッダーの各部分はセミコロンで区切られます。
const list = ['a', 'b', 'c'];
for (let i = 0; i < list.length; i++) {
// code that should be executed for each item list[i]
}
ステップの定義には、上の例のように、JavaScriptのインクリメント演算子やデクリメント演算子を使うことがよくあります。
これらの演算子は、変数をその場で変更します。
++は数値に1を足し、--は数値から1を引きます。
let i = 3;
i++;
// i is now 4
let j = 0;
j--;
// j is now -1
庭に何羽の鳥がやってくるかを記録している、熱心なバードウォッチャーです。 ふだんはノートに正の字を書いて鳥の数を数えていますが、もっとデータをうまく扱いたいと考えています。 ノートに付けていた過去数週間の1日ごとの鳥の数は、すでにデータ化してあります。
ここからは、数えた鳥の合計を求めたり、特定の週の鳥の数を計算したり、数え間違いを修正したりします。
練習として、以下の各タスクはforループを使って解いてみましょう。
まずは全体像をつかむことから、データの分析を始めましょう。 記録を始めてから数えた鳥が全部で何羽になるかを調べます。
1日ごとの鳥の数を持つ配列のようなオブジェクトを受け取る関数totalBirdCountを実装します。
数えた鳥の合計を戻り値として返します。
birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
totalBirdCount(birdsPerDay);
// => 34
鳥の数の全体像がつかめたので、次はもっと細かく分析してみましょう。
1日ごとの鳥の数の配列のようなオブジェクトと、週番号を受け取る関数birdsInWeekを実装します。
その週に数えた鳥の合計を返します。
週は常に完全に記録されているものとします。
birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
birdsInWeek(birdsPerDay, 2);
// => 12
鳥をずっと記録しているあいだ、庭の遠くの隅に1羽が隠れていたことに気づきました。 その鳥は、1日おきに必ず庭で過ごしていたことがわかりました。 その間の日にどこにいたのかは正確にはわかりませんが、庭にいなかったことは確かです。 バードウォッチャーとしての勘から、リストで記録を始めた最初の日には、その鳥が庭にいたこともわかります。
この新しい情報をもとに、1日ごとに数えた鳥の配列のようなオブジェクトを引数に取る関数fixBirdCountLogを書きます。与えられた配列を変更して、数え間違いを修正します。
birdsPerDay = [2, 5, 0, 7, 4, 1];
fixBirdCountLog(birdsPerDay);
// => [3, 5, 1, 7, 5, 1]
Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。