আমাদের কাছে নিচের মতো একটি অবজেক্টের অ্যারে আছে:
const arr = [ { value: 12, gap: 1 }, { value: 13, gap: 1 }, { value: 14, gap: 1 }, { value: 15, gap: 1 }, { value: 19, gap: 2 }, { value: 21, gap: 1 }, { value: 22, gap: 1 }, { value: 23, gap: 1 }, { value: 27, gap: 1 }, { value: 31, gap: 4 }, { value: 35, gap: 4 }, { value: 39, gap: 4 }, { value: 43, gap: 1 }, { value: 50, gap: 1 }, { value: 51, gap: 1 }, { value: 52, gap: 1 }, { value: 55, gap: 1 }, { value: 57, gap: 1 }, ];আমাদের একটি ফাংশন লিখতে হবে যা এই অ্যারেটি গ্রহণ করে এবং একটি নতুন অ্যারে রিটার্ন করবে যেখানে সকল কনসিকিউটিভ অবজেক্ট যেসবের value পূর্ববর্তী অবজেক্টের value এবং gap-এর সমষ্টির সমান, সেগুলো একসাথে একটি সাব-অ্যারেতে গ্রুপ করা থাকবে।
উদাহরণস্বরূপ - value 12-এর gap 1 এবং এর পরবর্তী অবজেক্টের value 13, তাই সেগুলো গ্রুপ হবে এবং তাদের সাথে value 14 এবং 15 ও গ্রুপ হবে, ইত্যাদি।
এখন, সমস্যাটি বুঝতে পারলে, কোড লিখার দিকে যাই। আমরা Array.prototype.reduce() মেথড ব্যবহার করব ডিজায়ারড অ্যারে তৈরির জন্য:
উদাহরণ
const arr = [ { value: 12, gap: 1 }, { value: 13, gap: 1 }, { value: 14, gap: 1 }, { value: 15, gap: 1 }, { value: 19, gap: 2 }, { value: 21, gap: 1 }, { value: 22, gap: 1 }, { value: 23, gap: 1 }, { value: 27, gap: 1 }, { value: 31, gap: 4 }, { value: 35, gap: 4 }, { value: 39, gap: 4 }, { value: 43, gap: 1 }, { value: 50, gap: 1 }, { value: 51, gap: 1 }, { value: 52, gap: 1 }, { value: 55, gap: 1 }, { value: 57, gap: 1 }, ]; const groupArray = arr => { return arr.reduce((acc, val, ind, array) => { // accumulated data এবং accumulated data-এর lastIndex const { data, currentIndex } = acc; // বর্তমান অবজেক্টের প্রোপার্টি const { value, gap } = val; // পূর্ববর্তী অবজেক্টের প্রোপার্টি const v = arr[ind-1]?.value; const g = arr[ind-1]?.gap; if(ind === 0 || value !== v + g){ // লাস্ট অবজেক্টের ইনডেক্স রেকর্ড করা এবং নতুন সাব-অ্যারে পুশ করা const index = data.push([val]) - 1; return { data, currentIndex: index }; }; data[currentIndex].push(val); return { data, currentIndex }; }, { data: [], currentIndex: 0 }).data; } console.log(groupArray(arr));আউটপুট
কনসোলে আউটপুট হবে:
[ [ { value: 12, gap: 1 }, { value: 13, gap: 1 }, { value: 14, gap: 1 }, { value: 15, gap: 1 } ], [ { value: 19, gap: 2 }, { value: 21, gap: 1 }, { value: 22, gap: 1 }, { value: 23, gap: 1 } ], [ { value: 27, gap: 1 } ], [ { value: 31, gap: 4 }, { value: 35, gap: 4 }, { value: 39, gap: 4 }, { value: 43, gap: 1 } ], [ { value: 50, gap: 1 }, { value: 51, gap: 1 }, { value: 52, gap: 1 } ], [ { value: 55, gap: 1 } ], [ { value: 57, gap: 1 } ] ]