JavaScript-da Takroriy Amallarni Optimallashtirish
Hatto engil amal ham, tsikl ichida qayta-qayta takrorlansa, ko'p resurslarni talab qilishi mumkin.
Keling, bir misolni ko'rib chiqaylik. Faraz qilaylik, bizda ma'lum bir massiv mavjud:
let arr = [1, 2, 3, 4, 5, 6];
Keling, ushbu massiv elementlarining o'rtacha qiymatini topaylik. Buning uchun elementlar yig'indisini topib, uni ular soniga bo'lish kerak. Faraz qilaylik, ma'lum bir dasturchi bu masalani quyidagicha hal qilgan:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Keling, bunday yechimning muammolarini ko'rib chiqaylik. Texnik jihatdan kod to'g'ri ishlaydi va to'g'ri javob beradi. Masala shundaki, matematik jihatdan ham butun yig'indini soniga bo'lish, ham har bir qo'shiluvchini alohida-alohida soniga bo'lish to'g'ri hisoblanadi.
Biroq, boshqa muammo paydo bo'ladi. Masala shundaki, biz bo'lish amalini massivimizdagi elementlar soni qadar marta bajaramiz. Va shunday bo'lib qoladiki, biz ko'p miqdorda ortiqcha amallarni bajaramiz, chunki bo'lish amalini oxirida - faqat bir marta, butun topilgan yig'indini bo'lish orqali bajarish mumkin edi.
Keling, kodimizni optimallashtiramiz:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Quyidagi kodni optimallashtiring:
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);
}
}
Quyidagi kodni optimallashtiring:
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);