জাভাস্ক্রিপ্টে চক্রীয় অপারেশনের অপ্টিমাইজেশন

এমনকি একটি হালকা অপারেশন, যা বারবার লুপে পুনরাবৃত্তি হয়, অনেক রিসোর্স নিতে পারে।

আসুন একটি উদাহরণ দেখি। ধরা যাক আমাদের একটি নির্দিষ্ট অ্যারে দেওয়া হয়েছে:

javascriptlet arr = [1, 2, 3, 4, 5, 6];

এই অ্যারের উপাদানগুলির গড় বের করা যাক। এটি করার জন্য, উপাদানগুলির যোগফল খুঁজে বের করতে হবে এবং এটিকে সংখ্যা দিয়ে ভাগ করতে হবে। ধরা যাক কোনো প্রোগ্রামার ইতিমধ্যেই এই সমস্যাটি সমাধান করেছেন নিম্নলিখিত উপায়ে:

javascriptlet avg  = 0;

for (let elem of arr) {
  avg += elem / arr.length;
}

console.log(avg);

আসুন এমন সমাধানের সমস্যাগুলি বিবেচনা করি। প্রযুক্তিগতভাবে কোডটি সঠিকভাবে কাজ করে এবং সঠিক উত্তর দেয়। বিষয়টি হল যে গাণিতিকভাবে সঠিক সম্পূর্ণ যোগফলকে সংখ্যা দিয়ে ভাগ করা, এবং প্রতিটি পদকে আলাদাভাবে সংখ্যা দিয়ে ভাগ করা।

যাইহোক, অন্য একটি সমস্যা দেখা দেয়। বিষয়টি হল যে আমরা ভাগের কাজটি সম্পাদন করব যতবার আমাদের অ্যারেতে উপাদান রয়েছে। এবং দেখা যাচ্ছে যে আমরা করছি অনেকগুলি অতিরিক্ত অপারেশন, কারণ ভাগটি করা যেত শেষে - একবার, সম্পূর্ণ প্রাপ্ত যোগফলকে ভাগ করে।

আসুন আমাদের কোডটি অপ্টিমাইজ করি:

javascriptlet sum = 0;

for (let elem of arr) {
  sum += elem;
}

let avg = sum / arr.length;
console.log(avg);
Задание 1

নিম্নলিখিত কোডটি অপ্টিমাইজ করুন:

javascriptfor (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);
  }
}
Задание 2

নিম্নলিখিত কোডটি অপ্টিমাইজ করুন:

javascriptlet 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);