📿পুনারাবৃত্তি (Iteration)

জাভাস্ক্রিপ্টে অনেক গুলো বিল্ড ইন উচ্চ আদেশ (Higher Order Function) ফাংশন আছে । যেমনঃ forEach, map, filter, find, reduce এবং every. পুনারাবৃত্তি (Iteration) বিষয়টা খুবই মিল মিল বিষয় লুপের সাথে। লুপ হচ্ছে একটি নির্দিষ্ট কন্ট্রোল কাঠামো যেইটা একটি নির্দিষ্ট ব্লককে নির্দিষ্ট শর্ত এর ভিত্তিতে পুনরাবৃতি করে। আর পুনারাবৃত্তি (Iteration) হচ্ছে একটি বিন্যাস(Array) এর উপর ভিত্তি করে বা কিছু উপদানের উপর ভিত্তি করে সেইটাকে একে একে দেখানো বা ব্লক উপদান গুলোর মধ্য দিয়ে যাওয়া ।

জানি উপরের বিষয় গুলো বুঝতে একটু কষ্ট হয়েছে অনেকের কারণ বিষয়টা অত সহজ না। আমি এই বিষয় গুলো আরো বিস্তারিত উচ্চ আদেশ(Higher Order Function) আধ্যায়ে আলোচনা করেছি। পড়তে থাকুন আস্তে আস্তে বুঝে যাবেন আমাদের কোন তারা নেই ।

এখন আসেন জাভাস্ক্রিপ্টের পুনারাবৃত্তি (Iteration) নিয়ে কয়েকটা উদাহরন দেখি।

ধরুন আপনার কাছে একটা বাড়ির দৈনিক খরচের তালিকা আছে। নিচের মত করে ।

const dailyHomeCosts = [
  50, 60, 45, 55, 70, 65, 80, 75, 60, 55,
  70, 75, 65, 80, 90, 85, 70, 55, 75, 80,
  60, 65, 70, 75, 55, 50, 65, 80, 75, 60
];

এখন আপনার এইখান থেকে বের করতে হবে আপনি ৮০ টাকা বা তার উপরে বাজার করেছেন সেই খরচ গুলো

চলুন বেশি দেরি না করে বের করে ফেলি।

উদাহরণঃ
const highestCost = dailyHomeCosts.filter((cost)=>cost>=80)
console.log(highestCost )
Output:
[ 80, 80, 90, 85, 80, 80 ]

ব্যাস সে কিন্তু আপনাকে সাথে সাথে ৮০ টাকা বা তার উপরে বাজার বাজার খরচ গুলো দিয়ে দিবে।

চলুন এবার আমরা এই ফাংশন গুলোর ব্যাবহার দেখব। প্রথমেই আমরা কিছু নাম্বার নিয়ে নেইঃ

const numbers = [1,2,3,4,5,6,7,8]

forEach: একটা কলব্যাক ফাংশন নেয় এবং সেই ফাংশন আসলে অ্যারে এর প্রতিটা ইলিমেন্টের মধ্য দিয়ে যাবে কিন্তু কোন কিছু আপনাকে ফেরত বা রিটার্ন দিবে না। মানে হলো সে আপনাকে নতুন কোন অ্যারে দিবে না।

সিনট্যাক্সঃ
originalArray.forEach((currentValue, index, array) => {
  // perform some operation using currentValue
});
উদাহরণঃ
numbers.forEach(number => {
  console.log(number * 2);
});

map: একটা কলব্যাক ফাংশন নেয় এবং সেই আসলে অ্যারে এর প্রতিটা ইলিমেন্টের মধ্য দিয়ে যাবে এবং আপনি যে অ্যারেটা দিয়েছেন সেইটার উপর ভিত্তি করে আপনাকে একটা নতুন অ্যারে ফেরত দিবে। মনে রাখা শ্রেয় যে আপনাকে যে অ্যারে ফেরত দিবে সেইটার length আর map কে দেওয়া অ্যারে এর length কিন্তু সমান হবে।

সিনট্যাক্সঃ
const newArray = originalArray.map((currentValue, index, array) => {
  // return transformed value based on currentValue
});
উদাহরনঃ
const doubledNumbers = numbers.map(number => number * 2);
console.log(doubledNumbers); 
// Output: [2, 4, 6, 8, 10]

filter: এইটা ও একটা কলব্যাক ফাংশন নিবে এবং আপানার ফাংশনের ভ্যালু যে সমস্ত স্টেটমেন্টের জন্য সত্য হবে সেসকল উপদানের জন্য নতুন একটি অ্যারে ফেরত বা রিটার্ন দিবে।

সিনট্যাক্সঃ
const newArray = originalArray.filter((currentValue, index, array) => {
  // return true or false based on some condition using currentValue
});
উদাহরনঃ
const evenNumbers = numbers.filter(number => number % 2 === 0);
console.log(evenNumbers); // Output: [2, 4]

find: এইটা আগের মত করে একটা কলব্যাক ফাংশন নিবে কিন্তু যে স্টেটমেন্টের জন্য সত্য শুধু মাত্র সেই ভ্যালু টা ফেরত দিবে বা রির্টান করবে

সিনট্যাক্সঃ
const result = originalArray.find((currentValue, index, array) => {
  // return true or false based on some condition using currentValue
});
উদাহরনঃ
const firstEven = numbers.find(number => number % 2 === 0);
console.log(firstEven); // Output: 2

reduce: এইটা দুইটা প্যারামিটার নেয় প্রথম প্যারামিটার হিসেবে reduce একটা কলব্যাক ফাংশন নেয় এবং ঐ কলব্যাক ফাংশন দুইটা প্যারামিটার নেয় আর একটা হচ্ছে accumulator আরেকটা হচ্ছে currentvalue আর ২য় প্যারামিটার টা হচ্ছে initialvalue ।

সিনট্যাক্সঃ
const result = originalArray.reduce((accumulator, currentValue, index, array) => {
  // return updated accumulator value based on currentValue
}, initialValue);
উদাহরনঃ
const sum = numbers.reduce((accumulator, currentNumber) =>{
   return accumulator + currentNumber, 0);
}
console.log(sum); // Output: 15

every: এইটা একটা কলব্যাক ফাংশন নেয় এবং ঐ ফাংশনের স্টেটমেন্টে লিখা প্রত্যকটি উপদানের জন্য যদি সত্য হয় তাহলে every true রিটার্ন করে অথবা false রিটার্ন করে ।

সিনট্যাক্সঃ
const result = originalArray.every((currentValue, index, array) => {
  // return true or false based on some condition using currentValue
});
উদাহরণঃ
const allEven = numbers.every(number => number % 2 === 0);
console.log(allEven); // Output: true

some: একটা কলব্যাক ফাংশন নেই এবং ঐ ফাংশনে লিখা কোন একটা স্টেটমেন্ট ও যদি সত্য হয় তাহলে true রিটার্ন করে নতুবা false রির্টান করে।

সিনট্যাক্সঃ
const result = originalArray.some((currentValue, index, array) => {
  // return true or false based on some condition using currentValue
});
উদাহরনঃ
const hasEven = numbers.some(number => number % 2 === 0);
console.log(hasEven); // Output: true

reduceRight: এইটা একটা কলব্যাক ফাংশন নেই এবং reduce টিক উল্টো কাজ করে মানে সে অ্যারে এর শেষ থাকে কাজ করে এইখানে accumulator শেষ থেকে এবং ভ্যালু হোল্ড করে

সিনট্যাক্সঃ
const result = originalArray.reduceRight((accumulator, currentValue, index, array) => {
  // return updated accumulator value based on currentValue
}, initialValue);
উদাহরণ
const result = numbers.reduceRight((acc, num) => acc - num, 0);
console.log(result); // Output: -2 (0 - 4 - 3 - 2 - 1)

Last updated