নিচের বাইনারি অ্যারে (অ্যারে A) কনসিডার করুন:
const arr = [1,0,1,1,1,1,0,1,1];
যখন এই অ্যারেটি ফাংশনের মাধ্যমে পাস করানো হয়, যেনাম sumRight(), তবে নিচের আউটপুট অ্যারে (অ্যারে B) তৈরি হয়:
const output = [1,0,4,3,2,1,0,2,1];
ফাংশন বুঝা
অ্যারে arr-এর এলিমেন্টগুলো ০ বা ১ হতে পারে। ফাংশনটি অ্যারে arr-এর শেষ এলিমেন্ট থেকে উল্টে গণনা শুরু করে, যদি অ্যারে arr-এ কনসিকিউটিভ ১ থাকে তবে আউটপুট অ্যারেতে সংশ্লিষ্ট এলিমেন্ট হবে ১ কিন্তু অ্যারে arr-এ দ্বিতীয় কনসিকিউটিভ ১-এর জন্য সেটি হবে ২। ইনপুট অ্যারেতে তৃতীয় ১-এর জন্য আউটপুটে ৩ হবে, কিন্তু অ্যারে arr-এ ০ रहनेলে আউটপুটেও ০ থাকবে।
তাহলে, এই ফাংশনের কোড লিখি Array.prototype.reduceRight() মেথড ব্যবহার করে, যা নরমল reduce মেথডের মতো কাজ করে, শুধু ডানে থেকে শুরু করে বামে চলে:
উদাহরণ
const arr = [1,0,1,1,1,1,0,1,1]; const sumRight = arr => { return arr.reduceRight((acc, val) => { const { prev, res } = acc; if(val === 0){ return { prev: 0, res: res.concat(0) }; }; return { res: res.concat(val+prev), prev: prev+1 }; }, { prev: 0, res: [] }).res.reverse(); }; console.log(sumRight(arr));আউটপুট
কনসোলে আউটপুট হবে:
[ 1, 0, 4, 3, 2, 1, 0, 2, 1 ]