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 的遞增或遞減運算子,如上例所示。這些運算子會直接修改變數本身。++會將數字加一,--會將數字減一。
let i = 3;
i++;
// i is now 4
let j = 0;
j--;
// j is now -1
你是個熱衷的賞鳥者,會記錄有多少鳥兒造訪過你的花園。平常你會用筆記本裡的計數表來計算鳥的數量,但你希望能更妥善地運用這些資料。你已經把過去幾週記在筆記本裡的每日鳥數數位化了。
現在你想算出自己總共數到幾隻鳥、計算某一週的鳥數,並修正一個計數錯誤。
為了練習,請使用for迴圈來解出下方的每個任務。
我們先從整體的角度來分析這些資料吧。找出你從開始記錄以來總共數到了幾隻鳥。
實作一個函式totalBirdCount,它接受一個包含每日鳥數的類陣列物件。這個函式應該回傳你總共數到的鳥數。
birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
totalBirdCount(birdsPerDay);
// => 34
現在你對自己的鳥數資料已經有了大致的概念,接下來想做更細部的分析。
實作一個函式birdsInWeek,它接受一個每日鳥數的類陣列物件以及一個週次。它會回傳你在那一週總共數到的鳥數。你可以假設每一週都有完整記錄。
birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
birdsInWeek(birdsPerDay, 2);
// => 12
你發現,在你一直努力記錄鳥兒的這段期間,其實有一隻鳥躲在花園的遠方角落。你推斷出這隻鳥每隔一天就會待在你的花園裡。你不清楚在這些日子之間牠確切在哪裡,但可以肯定不在你的花園裡。你賞鳥的直覺也告訴你,這隻鳥在你清單中記錄的第一天就在你的花園裡。
根據這項新資訊,寫一個函式fixBirdCountLog,它接受一個每日鳥數的類陣列物件作為引數。它應該藉由修改傳入的陣列來修正這個計數錯誤。
birdsPerDay = [2, 5, 0, 7, 4, 1];
fixBirdCountLog(birdsPerDay);
// => [3, 5, 1, 7, 5, 1]