JavaScriptтеги циклдик операцияларды оптималдаштыруу
Эң жеңил операция дагы циклде бир нече жолу кайталанса, көп ресурсту талап кылышы мүмкүн.
Келгиле, мисал аркылуу карап көрөлү. Бизде белгилүү бир массив бар дейли:
let arr = [1, 2, 3, 4, 5, 6];
Келгиле, бул массивдин элементтеринин орточо маанисин табалы. Бул үчүн элементтердин суммасын таап, аны санга бөлүү керек. Бир программачы бул маселени төмөнкүдөй чечкен дейли:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Келгиле, мындай чечимдин кемчиликтерин карап көрөлү. Техникалык жактан код иштейт жана туура жооп берет. Масел математикалык жактан туура, анткени сумманы санга бөлүү дагы, ар бир кошулганды санга бөлүү дагы туура.
Бирок, дагы бир көйгөй пайда болот. Иш жүзүндө, биз бөлүү амалын массивдеги элементтердин санына жараша аткарабыз. Натыйжада биз көптөгөн ашыкча амалдарды жасап жатабыз, себеби бөлүүнү акырында - бир жолу, табылган бардык сумманы бөлүп чыгаруу менен аткарсак болмок.
Келгиле, биздин кодду оптималдаштыралы:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Төмөнкү кодду оптималдаштырыңыз:
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);
}
}
Төмөнкү кодду оптималдаштырыңыз:
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);