মান লিয়ে, আমাদের একটি অবজেক্টের অ্যারে আছে যাতে কিছু ছাত্র ও তাদের নম্বর ডেটা আছে -
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' },
];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন একটি অ্যারে গ্রহণ করবে। ফাংশনটি অবজেক্টের 'subject' প্রোপার্টি 베이সে রিডান্ড্যান্ট এন্ট্রি এলিমিনেট করবে। এর अलावा, ফাংশনটি সব marks এবং no of students একটি ইউনিক অবজেক্টে যোগ করবে।
অতএব, উপরের অ্যারেতে আউটপুট হবে -
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 }
]