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:

javascriptlet 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:

javascriptlet 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:

javascriptlet sum = 0;

for (let elem of arr) {
  sum += elem;
}

let avg = sum / arr.length;
console.log(avg);
Задание 1

Optimice el siguiente código:

javascriptfor (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);
  }
}
Задание 2

Optimice el siguiente código:

javascriptlet 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);