Optimierung zyklischer Operationen in JavaScript
Sogar eine leichte Operation, die mehrfach in einer Schleife wiederholt wird, kann viele Ressourcen verbrauchen.
Schauen wir uns ein Beispiel an. Nehmen wir an, wir haben ein Array:
let arr = [1, 2, 3, 4, 5, 6];
Lassen Sie uns den Durchschnitt der Elemente dieses Arrays finden. Dazu müssen wir die Summe der Elemente finden und durch die Anzahl teilen. Nehmen wir an, ein Programmierer hat diese Aufgabe bereits wie folgt gelöst:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Lassen Sie uns die Probleme dieser Lösung betrachten. Technisch gesehen funktioniert der Code korrekt und liefert das richtige Ergebnis. Tatsächlich ist es mathematisch korrekt, sowohl die gesamte Summe durch die Anzahl zu teilen, als auch jedes einzelne Summand durch die Anzahl zu teilen.
Es entsteht jedoch ein anderes Problem. Die Sache ist die, dass wir die Division so oft ausführen werden, wie es Elemente in unserem Array gibt. Und es stellt sich heraus, dass wir eine große Anzahl überflüssiger Operationen durchführen, denn die Division hätte man am Ende durchführen können - nur einmal, indem man die gesamte gefundene Summe teilt.
Lassen Sie uns unseren Code optimieren:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Optimieren Sie den folgenden Code:
for (let i = 1900; i <= 2100; i++) {
let curr = new Date;
let date = new Date(i, curr.getMonth(), curr.getDate());
if (curr.getDay() === date.getDay()) {
console.log(date);
}
}
Optimieren Sie den folgenden Code:
let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
for (let key in obj) {
if (String(obj[key])[0] === '1' || String(obj[key])[0] === '2') {
sum += obj[key];
}
}
console.log(sum);