Pengoptimuman Pusingan Gelung Berlebihan dalam JavaScript
Dalam kod berikut, seorang pengaturcara menyemak
sama ada nombor 3 wujud dalam array:
let 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:
let 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);
Kod berikut mengira berapa banyak
elemen array perlu ditambah
supaya jumlahnya menjadi lebih besar daripada 10.
Laksanakan pengoptimuman:
let 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);
Kod berikut mengeluarkan nombor genap dari julat yang diberikan. Laksanakan pengoptimuman:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Kod berikut mengeluarkan nombor
yang boleh dibahagi dengan 2
dan 3 secara serentak. Laksanakan pengoptimuman:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Kod berikut mencari semua hari Jumaat
13 dalam tahun semasa.
Laksanakan pengoptimuman:
for (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);
}
}
}