Optimización de operaciones cíclicas en JavaScript
Incluso una operación ligera, repetida múltiples veces en un bucle, puede consumir muchos recursos.
Veamos un ejemplo. Supongamos que tenemos un array:
let arr = [1, 2, 3, 4, 5, 6];
Encontremos el promedio de los elementos de este array. Para hacer esto, necesitamos encontrar la suma de los elementos y dividirla por la cantidad. Supongamos que algún programador ya ha resuelto esta tarea de la siguiente manera:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Analicemos los problemas de esta solución. Técnicamente, el código funciona correctamente y da la respuesta correcta. El hecho es que matemáticamente es correcto tanto dividir la suma total por la cantidad, como dividir cada uno de los sumandos por la cantidad.
Sin embargo, surge otro problema. El asunto es que realizaremos la división tantas veces como elementos haya en nuestro array. Y resulta que estamos haciendo una gran cantidad de operaciones innecesarias, ya que la división se podría haber hecho al final - una sola vez, dividiendo la suma total encontrada.
Optimicemos nuestro código:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Optimice el siguiente código:
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);
}
}
Optimice el siguiente código:
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);