Nenaudingu ciklo praėjimų optimizavimas JavaScript
Toliau pateiktame kode kažkoks programuotojas patikrina,
ar masyve yra skaičius 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);
Kas negerai su jo sprendimu? Atrodo, kad cikle
neatliekama jokių papildomų operacijų. Tačiau problema
yra ta, kad po to, kai nustatoma,
kad masyve yra skaičius 3, ciklas
vis tiek sukasi iki masyvo pabaigos.
Neracionaliausia bus, jei skaičius 3
bus rastas kažkur masyvo pradžioje, o pats masyvas
turės, tarkime, 1000 elementų.
Tai reikš tūkstantį nenaudingų papildomų ciklo
iteracijų! Neoptimalu.
Optimizuokime kodą, laiku sustabdydami ciklą:
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);
Toliau pateiktas kodas skaičiuoja, kiek
masyvo elementų reikia sudėti,
kad suma taptų didesnė už 10.
Atlikite optimizavimą:
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);
Toliau pateiktas kodas išveda lyginius skaičius iš nurodyto intervalo. Atlikite optimizavimą:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Toliau pateiktas kodas išveda skaičius,
kurie dalijasi iš 2
ir iš 3 vienu metu. Atlikite optimizavimą:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Toliau pateiktas kodas ieško visų penktadienių,
13-os dienos, einamaisiais metais.
Atlikite optimizavimą:
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);
}
}
}