Оптимизация на излишни цикли в JavaScript
В следния код някакъв програмист проверява
дали в масива има число 3:
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);
Какво не е наред с неговото решение? Изглежда, че
няма излишни операции в цикъла. Проблемът
обаче е, че след като се определи,
че числото 3 е в масива, цикълът
все още продължава да се върти до края на масива.
Най-нерационално ще бъде, ако числото 3
бъде намерено някъде в началото на масива, а самият масив
има дължина, да речем, 1000 елемента.
Ще се получат хиляда безполезни излишни итерации
на цикъла! Не е оптимално.
Нека оптимизираме кода, като спрем цикъла навреме:
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);
Следният код изчислява колко
елемента от масива трябва да се сумират,
за да стане сумата по-голяма от 10.
Извършете оптимизация:
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);
Следният код извежда четните числа от зададен интервал. Извършете оптимизация:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Следният код извежда числата,
които се делят едновременно на 2
и на 3. Извършете оптимизация:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Следният код търси всички петъци
13-ти в текущата година.
Извършете оптимизация:
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);
}
}
}