Optimizacija odvečnih prehodov zanke v JavaScript
V naslednji kodi nek programer preverja,
ali je v tabeli število 3:
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);
Kaj je narobe z njegovo rešitvijo? Zdi se, da se
ne izvajajo nobene odvečne operacije v zanki. Težava
je vendar v tem, da se po tem, ko se določi,
da je število 3 v tabeli, zanka
še vedno vrti do konca tabele.
Najbolj neracionalno bo, če se število 3
nahja nekje na začetku tabele, sama tabela pa
bo dolga, recimo, 1000 elementov.
Izkazalo se bo tisoč neuporabnih odvečnih iteracij
zanke! Ni optimalno.
Optimizirajmo kodo, tako da pravočasno ustavimo zanko:
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);
Naslednja koda prešteje, koliko
elementov tabele je treba sešteti,
da bo vsota večja od 10.
Izvedite optimizacijo:
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);
Naslednja koda izpiše sode številke iz danega intervala. Izvedite optimizacijo:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Naslednja koda izpiše številke,
deljive hkrati z 2
in z 3. Izvedite optimizacijo:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Naslednja koda išče vse petke
13 v tekočem letu.
Izvedite optimizacijo:
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);
}
}
}