Optimalisering av unødvendige loop-iterasjoner i JavaScript
I følgende kode sjekker en programmerer
om det finnes tallet 3 i arrayet:
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);
Hva er galt med løsningen hans? Det ser ut til
at det ikke gjøres noen unødvendige operasjoner
i loopen. Problemet er imidlertid at etter at det
er fastslått at tallet 3 er i arrayet,
fortsetter loopen å gå til slutten av arrayet.
Det mest irrasjonelle vil være hvis tallet 3
blir funnet et sted i begynnelsen av arrayet, mens selve arrayet
har en lengde på, for eksempel, 1000 elementer.
Da vil det bli tusen ubrukelige, unødvendige iterasjoner
av loopen! Ikke optimalt.
La oss optimalisere koden ved å stoppe loopen i tide:
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ølgende kode teller hvor mange
elementer i arrayet som må legges sammen
for at summen skal bli større enn 10.
Utfør optimalisering:
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ølgende kode skriver ut partall fra det gitte intervallet. Utfør optimalisering:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Følgende kode skriver ut tall
som er delelige med både 2
og 3. Utfør optimalisering:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Følgende kode søker etter alle fredager
13-ende i inneværende år.
Utfør optimalisering:
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);
}
}
}