Optimización de iteraciones innecesarias en bucles en JavaScript
En el siguiente código, un programador verifica
si hay un número 3 en el array:
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);
¿Qué está mal con su solución? Parece que no se realizan
operaciones innecesarias en el bucle. Sin embargo, el problema
es que después de determinar que el número 3
está en el array, el bucle
sigue ejecutándose hasta el final del array.
Lo más ineficiente sería si el número 3
se encuentra en algún lugar cerca del principio del array, y el array mismo
tiene una longitud de, digamos, 1000 elementos.
¡Resultaría en mil iteraciones adicionales inútiles
del bucle! No es óptimo.
Optimizamos el código, deteniendo el bucle a tiempo:
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);
El siguiente código calcula cuántos
elementos del array necesitan sumarse
para que la suma sea mayor que 10.
Realice la optimización:
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);
El siguiente código muestra números pares de un intervalo dado. Realice la optimización:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
El siguiente código muestra números
divisibles simultáneamente por 2
y por 3. Realice la optimización:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
El siguiente código busca todos los viernes
13 en el año actual.
Realice la optimización:
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);
}
}
}