আমাদের কাছে এই ধরনের বস্তুর একটি অ্যারে আছে -
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 },
]; আমাদের এমন একটি ফাংশন লিখতে হবে যা এই অ্যারেতে নেয় এবং একটি নতুন অ্যারে ফেরত দেয় যেখানে সমস্ত পরপর অবজেক্ট যার মান পূর্ববর্তী অবজেক্টের মানের সমষ্টির সমান এবং গ্যাপমগুলিকে একটি সাব্যারেতে একসাথে গোষ্ঠীবদ্ধ করতে হবে৷
উদাহরণ স্বরূপ − 12 মানের অবজেক্টের গ্যাপ 1 আছে এবং এর পরের অবজেক্টের মান 13 আছে, তাই সেগুলিকে অবশ্যই গোষ্ঠীবদ্ধ করতে হবে এবং তাদের সাথে 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) => {
// the accumulated data and lastIndex of accumulated data
const { data, currentIndex } = acc;
// the current object properties
const { value, gap } = val;
// the previous object properties
const v = arr[ind-1]?.value;
const g = arr[ind-1]?.gap;
if(ind === 0 || value !== v + g){
// recording the index of last object and pushing new subarray
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 } ]
]