Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 각 학생의 평균 n 최고 점수 찾기

<시간/>

일부 학생에 대한 정보와 다음과 같은 기간 동안 학생이 채점한 점수가 포함된 객체 배열이 있다고 가정합니다.

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)를 취하는 JavaScript 함수를 작성해야 합니다.

그런 다음 함수는 점수 속성에 따라 고유한 각 학생의 최고 레코드 수를 선택하고 각 학생의 평균을 계산해야 합니다. 학생에 대한 기록이 충분하지 않은 경우 해당 학생의 모든 기록을 고려해야 합니다.

마지막으로 함수는 학생 ID를 키로, 평균 점수를 값으로 갖는 객체를 반환해야 합니다.

예시

이에 대한 코드는 -

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 }