Optimierung überflüssiger Schleifendurchläufe in JavaScript
Im folgenden Code prüft ein Programmierer,
ob das Array die Zahl 3 enthält:
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);
Was ist an seiner Lösung falsch? Auf den ersten Blick scheint
die Schleife keine überflüssigen Operationen auszuführen. Das Problem
liegt jedoch darin, dass die Schleife weiterläuft, nachdem bereits
festgestellt wurde, dass die Zahl 3 im Array enthalten ist.
Am ineffizientesten ist es, wenn die Zahl 3
irgendwo am Anfang des Arrays gefunden wird, das Array selbst
aber eine Länge von, sagen wir, 1000 Elementen hat.
Das ergibt tausend nutzlose, überflüssige Schleifeniterationen!
Nicht optimal.
Optimieren wir den Code, indem wir die Schleife rechtzeitig anhalten:
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);
Der folgende Code zählt, wie viele
Elemente des Arrays addiert werden müssen,
damit die Summe größer als 10 wird.
Führen Sie eine Optimierung durch:
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);
Der folgende Code gibt gerade Zahlen aus einem gegebenen Bereich aus. Führen Sie eine Optimierung durch:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Der folgende Code gibt Zahlen aus,
die gleichzeitig durch 2
und durch 3 teilbar sind. Führen Sie eine Optimierung durch:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Der folgende Code sucht nach allen Freitagen,
den 13., im aktuellen Jahr.
Führen Sie eine Optimierung durch:
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);
}
}
}