ধরুন আমাদের কাছে বস্তুর একটি বিন্যাস রয়েছে যাতে কিছু শিক্ষার্থীর তথ্য এবং তাদের চিহ্নগুলি এইরকম −
const arr = [
{ subject: 'Maths', marks: '40', noOfStudents: '5' },
{ subject: 'Science', marks: '50', noOfStudents: '16' },
{ subject: 'History', marks: '35', noOfStudents: '23' },
{ subject: 'Science', marks: '65', noOfStudents: '2' },
{ subject: 'Maths', marks: '30', noOfStudents: '12' },
{ subject: 'History', marks: '55', noOfStudents: '20' },
]; আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এইরকম একটি অ্যারে নেয়৷
বস্তুর 'বিষয়' বৈশিষ্ট্যের ভিত্তিতে ফাংশনটি অপ্রয়োজনীয় এন্ট্রিগুলিকে বাদ দিতে হবে। অধিকন্তু, ফাংশনটি সেই একক বস্তুতে একটি অনন্য বস্তুর জন্য সমস্ত চিহ্ন এবং ছাত্র সংখ্যা যোগ করতে হবে।
অতএব, উপরের অ্যারের জন্য, আউটপুটটি −
এর মত হওয়া উচিতconst output = [
{ subject: 'Maths', marks: '70', noOfStudents: '17' },
{ subject: 'Science', marks: '115', noOfStudents: '18' },
{ subject: 'History', marks: '95', noOfStudents: '43' },
]; উদাহরণ
এর জন্য কোড হবে −
const arr = [
{ subject: 'Maths', marks: '40', noOfStudents: '5' },
{ subject: 'Science', marks: '50', noOfStudents: '16' },
{ subject: 'History', marks: '35', noOfStudents: '23' },
{ subject: 'Science', marks: '65', noOfStudents: '2' },
{ subject: 'Maths', marks: '30', noOfStudents: '12' },
{ subject: 'History', marks: '55', noOfStudents: '20' },
];
const groupBySubject = (arr = []) => {
const map = {};
let res = [];
res = arr.reduce((acc, val) => {
const { subject, marks, noOfStudents } = val;
const { length: l } = acc;
if(map.hasOwnProperty(subject)){
acc[map[subject]]['marks'] = +marks;
acc[map[subject]]['noOfStudents'] = +noOfStudents;
}
else{
map[subject] = l;
acc.push({
subject: subject,
marks: +marks,
noOfStudents: +noOfStudents
});
};
return acc;
}, []);
return res;
};
console.log(groupBySubject(arr)); আউটপুট
এবং কনসোলে আউটপুট হবে −
[
{ subject: 'Maths', marks: 30, noOfStudents: 12 },
{ subject: 'Science', marks: 65, noOfStudents: 2 },
{ subject: 'History', marks: 55, noOfStudents: 20 }
]