মনে করুন, আমাদের একটি অবজেক্টের অ্যারে আছে যেটে কিছু ছাত্রের তথ্য এবং সময়ের সাথে তাদের স্কোর রয়েছে —
const marks = [
{ id: 231, score: 34 },
{ id: 233, score: 37 },
{ id: 231, score: 31 },
{ id: 233, score: 39 },
{ id: 231, score: 44 },
{ id: 233, score: 41 },
{ id: 231, score: 38 },
{ id: 231, score: 31 },
{ id: 233, score: 29 },
{ id: 231, score: 34 },
{ id: 233, score: 40 },
{ id: 231, score: 31 },
{ id: 231, score: 30 },
{ id: 233, score: 38 },
{ id: 231, score: 43 },
{ id: 233, score: 42 },
{ id: 233, score: 28 },
{ id: 231, score: 33 },
];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন একটি অ্যারে প্রথম আর্গুমেন্ট এবং একটি সংখ্যা (num) দ্বিতীয় আর্গুমেন্ট হিসেবে গ্রহণ করবে।
ফাংশনটি প্রতিটি অনন্য ছাত্রের num সংখ্যক সর্বোচ্চ স্কোর রেকর্ড বেছে নেবে এবং তাদের গড় বের করবে। যদি কোনো ছাত্রের পর্যাপ্ত রেকর্ড না থাকে, তবে তাদের সব রেকর্ড বিবেচনা করবে।
শেষে ফাংশনটি একটি অবজেক্ট রিটার্ন করবে যেটে ছাত্রের id কী (key) এবং তাদের গড় স্কোর মান (value) হিসেবে থাকবে।
উদাহরণ
কোডটি নিচে দেওয়া হলো —
const marks = [
{ id: 231, score: 34 },
{ id: 233, score: 37 },
{ id: 231, score: 31 },
{ id: 233, score: 39 },
{ id: 231, score: 44 },
{ id: 233, score: 41 },
{ id: 231, score: 38 },
{ id: 231, score: 31 },
{ id: 233, score: 29 },
{ id: 231, score: 34 },
{ id: 233, score: 40 },
{ id: 231, score: 31 },
{ id: 231, score: 30 },
{ id: 233, score: 38 },
{ id: 231, score: 43 },
{ id: 233, score: 42 },
{ id: 233, score: 28 },
{ id: 231, score: 33 },
];
const calculateHighestAverage = (marks = [], num = 1) => {
const findHighestSum = (arr = [], upto = 1) => arr
.sort((a, b) => b - a)
.slice(0, upto)
.reduce((acc, val) => acc + val);
const res = {};
for(const obj of marks){
const { id, score } = obj;
if(res.hasOwnProperty(id)){
res[id].push(score);
}else{
res[id] = [score];
}
};
for(const id in res){
res[id] = findHighestSum(res[id], num);
};
return res;
};
console.log(calculateHighestAverage(marks, 5));
console.log(calculateHighestAverage(marks, 4));
console.log(calculateHighestAverage(marks));
আউটপুট
কনসোল আউটপুট:
{ '231': 193, '233': 200 } { '231': 159, '233': 162 } { '231': 44, '233': 42 }