Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm điểm trung bình của n điểm cao nhất của mỗi học sinh trong JavaScript

Giả sử, chúng ta có một mảng các đối tượng chứa thông tin về một số sinh viên và điểm của họ trong một khoảng thời gian như thế này -

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 },
];

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng như đối số đầu tiên và một số, chẳng hạn như num, làm đối số thứ hai.

Sau đó, hàm sẽ chọn số bản ghi cao nhất của mỗi học sinh duy nhất theo thuộc tính điểm và tính điểm trung bình cho mỗi học sinh. Nếu không có đủ hồ sơ cho bất kỳ sinh viên nào, chúng tôi nên xem xét tất cả hồ sơ của họ.

Và cuối cùng, hàm sẽ trả về một đối tượng có id sinh viên làm khóa và điểm trung bình của họ là giá trị.

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

{ '231': 193, '233': 200 }
{ '231': 159, '233': 162 }
{ '231': 44, '233': 42 }