Optimalisering van oorbodige lussiklusse in JavaScript
In die volgende kode kontroleer 'n programmeerder
of die nommer 3 in die array voorkom:
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);
Wat is fout met sy oplossing? Dit lyk asof daar
geen oorbodige operasies in die lus gedoen word nie. Die probleem
is egter dat nadat vasgestel is
dat die nommer 3 wel in die array is, die lus
steeds tot aan die einde van die array voortgaan.
Die mees onrasioneel sal wees as die nommer 3
iewers aan die begin van die array gevind word, en die array self
'n lengte het van, sê, 1000 elemente.
Dit sal dan duisend nuttelose oorbodige iterasies
van die lus wees! Nie optimaal nie.
Laat ons die kode optimaliseer deur die lus betyds te stop:
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);
Die volgende kode bereken hoeveel
array-elemente bymekaar getel moet word
voordat die som groter as 10 word.
Voer optimalisering uit:
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);
Die volgende kode druk ewe getalle uit 'n gegewe reeks uit. Voer optimalisering uit:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Die volgende kode druk getalle uit
wat gelyktydig deur 2
en deur 3 deelbaar is. Voer optimalisering uit:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Die volgende kode soek na alle Vrydae
wat die 13de is in die huidige jaar.
Voer optimalisering uit:
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);
}
}
}