Optimering av onödiga loopiterationer i JavaScript
I följande kod kontrollerar en programmerare
om arrayen innehåller siffran 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);
Vad är fel med hans lösning? Det verkar som att inga
onödiga operationer utförs i loopen. Problemet,
ändå, är att efter det har fastställts
att siffran 3 finns i arrayen, fortsätter
loopen ändå att snurra till slutet av arrayen.
Mest ineffektivt blir det om siffran 3
hittas någonstans i början av arrayen, medan själva arrayen
har en längd på, låt oss säga, 1000 element.
Då blir det tusen meningslösa, onödiga loopiterationer!
Inte optimalt.
Låt oss optimera koden genom att stoppa loopen i rätt tid:
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);
Följande kod räknar ut hur många
element i arrayen som behöver läggas ihop
för att summan ska bli större än 10.
Utför optimering:
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);
Följande kod skriver ut jämna tal från ett givet intervall. Utför optimering:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Följande kod skriver ut tal
som är delbara samtidigt med 2
och med 3. Utför optimering:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Följande kod letar efter alla fredagar
den 13:e i innevarande år.
Utför optimering:
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);
}
}
}