JavaScript-də tsiklik əməliyyatların optimallaşdırılması
Hətta yüngül bir əməliyyat belə, tsikldə çoxsaylı təkrarlananda, çox resurs sərf edə bilər.
Gəlin bir nümunəyə baxaq. Tutaq ki, bizə müəyyən bir massiv verilib:
let arr = [1, 2, 3, 4, 5, 6];
Gəlin bu massivin elementlərinin ortasını tapaq. Bunun üçün elementlərin cəmini tapıb onu sayına bölmək lazımdır. Tutaq ki, hansısa bir proqramçı bu problemi artıq aşağıdakı kimi həll edib:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Gəlin belə bir həllin problemlərinə baxaq. Texniki cəhətdən kod düzgün işləyir və düzgün cavab verir. Məsələ ondadır ki, riyazi cəhətdən düzgündür həm bütün cəmi sayına bölmək, həm də hər bir toplananı sayına bölmək.
Ancaq başqa bir problem yaranır. Məsələ ondadır ki, biz bölmə əməliyyatını massivimizdə nə qədər element varsa, o qədər dəfə yerinə yetirəcəyik. Və belə çıxır ki, biz çoxsaylı lazımsız əməliyyatlar edirik, çünki bölməni sona saxlayıb - bir dəfə, bütün tapılmış cəmi bölmək olardı.
Gəlin kodumuzu optimallaşdıraq:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Aşağıdakı kodu optimallaşdırın:
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);
}
}
Aşağıdakı kodu optimallaşdırın:
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);