Optimalizácia nadbytočných prechodov cyklu v JavaScripte
V nasledujúcom kóde nejaký programátor kontroluje,
či sa v poli nachádza číslo 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);
Čo je zlé na jeho riešení? Zdá sa, že žiadne
nadbytočné operácie v cykle sa nerobia. Problém
je však v tom, že po tom, ako sa zistilo,
že číslo 3 je v poli, cyklus
sa aj naďalej točí až do konca poľa.
Najneracionálnejšie to bude, ak sa číslo 3
nájde niekde na začiatku poľa, a samotné pole
bude mať dĺžku, povedzme, 1000 prvkov.
Výsledkom bude tisíc zbytočných nadbytočných iterácií
cyklu! Nie je to optimálne.
Optimalizujme kód včasným zastavením cyklu:
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);
Nasledujúci kód počíta, koľko
prvkov poľa treba sčítať,
aby sa súčet stal väčším ako 10.
Vykonajte optimalizáciu:
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);
Nasledujúci kód vypisuje párne čísla z daného rozsahu. Vykonajte optimalizáciu:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Nasledujúci kód vypisuje čísla,
deliteľné súčasne 2
a 3. Vykonajte optimalizáciu:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Nasledujúci kód hľadá všetky piatky
13-te v aktuálnom roku.
Vykonajte optimalizáciu:
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);
}
}
}