Pengoptimuman Pusingan Gelung Berlebihan dalam JavaScript

Dalam kod berikut, seorang pengaturcara menyemak sama ada nombor 3 wujud dalam array:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;

for (let elem of arr) {
  if (elem === 3) {
    exists = true;
  }
}

console.log(exists);

Apa yang salah dengan penyelesaiannya? Nampaknya tiada operasi berlebihan dilakukan dalam gelung. Masalahnya, walau bagaimanapun, ialah selepas ditentukan bahawa nombor 3 wujud dalam array, gelung terus berputar hingga akhir array.

Yang paling tidak rasional ialah jika nombor 3 ditemui di suatu tempat di awal array, manakala array itu sendiri panjangnya, katakan, 1000 elemen. Ini menghasilkan seribu lelaran gelung berlebihan yang tidak berguna! Tidak optimum.

Mari optimumkan kod dengan menghentikan gelung pada masanya:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;

for (let elem of arr) {
  if (elem === 3) {
    exists = true;
    break;
  }
}

console.log(exists);
Задание 1

Kod berikut mengira berapa banyak elemen array perlu ditambah supaya jumlahnya menjadi lebih besar daripada 10. Laksanakan pengoptimuman:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum = 0;
let i = 1;

for (let elem of arr) {
  sum += elem;
  
  if (sum <= 10) {
    i++;
  }
}

console.log(i);
Задание 2

Kod berikut mengeluarkan nombor genap dari julat yang diberikan. Laksanakan pengoptimuman:

javascriptfor (let i = 0; i <= 100; i++) {
  if (i % 2 === 0) {
    console.log(i);
  }
}
Задание 3

Kod berikut mengeluarkan nombor yang boleh dibahagi dengan 2 dan 3 secara serentak. Laksanakan pengoptimuman:

javascriptfor (let i = 0; i <= 100; i++) {
  if (i % 2 === 0 && i % 3 === 0) {
    console.log(i);
  }
}
Задание 4

Kod berikut mencari semua hari Jumaat 13 dalam tahun semasa. Laksanakan pengoptimuman:

javascriptfor (let i = 0; i <= 11; i++) {
  let curr = new Date;
  let last = new Date(curr.getFullYear(), i + 1, 0).getDate();
  
  for (let j = 1; j <= last; j++) {
    let date = new Date(curr.getFullYear(), i, j);
    
    if (date.getDate() === 13 && date.getDay() === 5) {
      console.log(date);
    }
  }
}