Optimisasi Perulangan Berlebih pada JavaScript

Dalam kode berikut, seorang programmer memeriksa apakah dalam array terdapat angka 3:

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 solusinya? Sepertinya tidak ada operasi berlebih yang dilakukan dalam perulangan. Masalahnya, bagaimanapun, adalah setelah ditentukan bahwa angka 3 ada dalam array, perulangan tetap berlanjut hingga akhir array.

Yang paling tidak rasional adalah jika angka 3 ditemukan di suatu tempat di awal array, sedangkan array itu sendiri panjangnya, katakanlah, 1000 elemen. Hasilnya adalah seribu iterasi tambahan yang tidak berguna! Tidak optimal.

Mari optimalkan kode, hentikan perulangan tepat waktu:

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

Kode berikut menghitung berapa banyak elemen array yang perlu dijumlahkan agar jumlahnya menjadi lebih dari 10. Lakukan optimisasi:

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

Kode berikut mencetak bilangan genap dari rentang yang ditentukan. Lakukan optimisasi:

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

Kode berikut mencetak bilangan yang habis dibagi 2 dan 3 secara bersamaan. Lakukan optimisasi:

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

Kode berikut mencari semua Jumat 13 di tahun berjalan. Lakukan optimisasi:

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);
    }
  }
}