Optimalisatie van overbodige lusiteraties in JavaScript
In de volgende code controleert een programmeur
of het getal 3 in de array aanwezig is:
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 er mis met zijn oplossing? Het lijkt erop dat er
geen overbodige bewerkingen in de lus worden uitgevoerd. Het probleem
is echter dat nadat is vastgesteld
dat het getal 3 in de array zit, de lus
toch blijft doordraaien tot het einde van de array.
Het meest inefficiënt zou zijn als het getal 3
ergens aan het begin van de array wordt gevonden, en de array zelf
een lengte heeft van, laten we zeggen, 1000 elementen.
Dat zou duizend nutteloze extra iteraties
van de lus opleveren! Niet optimaal.
Laten we de code optimaliseren door de lus op tijd te stoppen:
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);
De volgende code telt hoeveel
elementen van de array opgeteld moeten worden,
zodat de som groter wordt dan 10.
Voer optimalisatie 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);
De volgende code geeft even getallen uit een bepaald bereik weer. Voer optimalisatie uit:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
De volgende code geeft getallen weer
die tegelijkertijd deelbaar zijn door 2
en door 3. Voer optimalisatie uit:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
De volgende code zoekt naar alle vrijdag
de 13e in het huidige jaar.
Voer optimalisatie 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);
}
}
}