মান लीजিয়ে, আমাদের কাছে একটি দুই-মাত্রিক অ্যারে আছে যেটিতে কিছু রঙ এবং ফলের ডেটা নিচের মতো রয়েছে:
const data = [ ['orange', 'fruit'], ['red', 'color'], ['green', 'color'], ['orange', 'color'], ['banana', 'fruit'], ['blue', 'color'], ['lemon', 'fruit'], ['mango', 'fruit'], ['lemon', 'color'], ];
আমাদের একটি ফাংশন লিখতে হবে যা এই অ্যারেটি গ্রহণ করে এবং একটি অ্যারে রিটার্ন করে যেখানে বিভিন্ন ফল এবং রঙ তাদের ক্যাটাগরি অনুযায়ী গ্রুপ করা থাকবে।
এই উদাহরণে আমাদের শুধু দুটি ক্যাটাগরি আছে - 'fruit' এবং 'color', তাই আউটপুটে দুটি অবজেক্টের অ্যারে পাওয়া যাবে নিচের মতো:
[ { group: 'fruit', value: [ 'orange', 'banana', 'lemon', 'mango' ] }, { group: 'color', value: [ 'red', 'green', 'orange', 'blue', 'lemon' ] } ]দ্রষ্টব্য - এই উদাহরণে শুধু দুটি ক্যাটাগরি আছে কিন্তু আমাদের একটি ऐसा সমাধান লিখতে হবে যা ডাইনামিক সংখ্যক ক্যাটাগরির জন্য কাজ করবে, শুধু দুটির জন্য নয়।
সমাধান
এই সমস্যা সমাধানের জন্য আমরা Array.prototype.reduce() মেথড ব্যবহার করব। প্রতিটি সাব-অ্যারের জন্য আমরা চেক করব যে সেটির গ্রুপ ইতিমধ্যে আছে কিনা। যদি গ্রুপ থাকে তবে এর value প্রোপার্টিতে নতুন মানটি পুশ করব, অন্যথায় নতুন গ্রুপের জন্য একটি অবজেক্ট তৈরি করে অ্যারেতে পুশ করব।
উদাহরণ
const data = [ ['orange', 'fruit'], ['red', 'color'], ['green', 'color'], ['orange', 'color'], ['banana', 'fruit'], ['blue', 'color'], ['lemon', 'fruit'], ['mango', 'fruit'], ['lemon', 'color'], ]; const groupData = arr => { return arr.reduce((acc, val) => { const [value, groupName] = val; const groupIndex = acc.findIndex(el => el?.group === groupName); if(groupIndex !== -1){ acc[groupIndex].value.push(value); }else{ acc.push({ group: groupName, value: [value] }); } return acc; }, []); }; console.log(groupData(data));আউটপুট
কনসোলে আউটপুট হবে:
[ { group: 'fruit', value: [ 'orange', 'banana', 'lemon', 'mango' ] }, { group: 'color', value: [ 'red', 'green', 'orange', 'blue', 'lemon' ] } ]