상세 컨텐츠

본문 제목

Javascript 고차 함수문제(12) - studentReports

Programming Language/JavaScript

by Yongari 2022. 12. 10. 23:39

본문

문제

학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열을 리턴해야 합니다.

  1. 남학생들의 정보는 리턴하는 배열에서 제외합니다.
  2. 'grades' 속성값은 평균값(number 타입)으로 바꿉니다.

입력

인자 1 : students

  • 객체를 요소로 갖는 배열
  • arr[i]는 'name', 'gender' 등의 속성을 갖는 객체
  • 'grades' 속성은 number 타입을 요소로 갖는 배열
  • 'grades' 속성이 빈 배열인 경우는 없다고 가정합니다.

출력

  • 반복문(for, while) 사용은 금지됩니다.
  • 배열을 리턴해야 합니다.
  • 배열로 되어 있는 학생들의 성적을 number 타입의 평균값으로 변형해야 합니다.


 

입출력 예시

let studentList = [
  {
    name: 'Anna',
    gender: 'female',
    grades: [4.5, 3.5, 4],
  },
  {
    name: 'Dennis',
    gender: 'male',
    country: 'Germany',
    grades: [5, 1.5, 4],
  },
  {
    name: 'Martha',
    gender: 'female',
    grades: [5, 4, 4, 3],
  },
  {
    name: 'Brock',
    gender: 'male',
    grades: [4, 3, 2],
  },
];

let output = studentReports(studentList);

console.log(output); // -->
[
  { name: 'Anna', gender: 'female', grades: 4 },
  { name: 'Martha', gender: 'female', grades: 4 },
];

 

풀이코드 설명

function studentReports(students) {
  //students객체의 모든 요소들을 순회합니다. 
  // 그중 성별이 여성인 요소만 반환합니다.
  const femail =  students.filter(function(el){
    return el.gender === 'female';
  })

  return femail.map(function(el){
    //위에서 만든 femail배열에서 grades 배열안의 모든 요소들을 순회하면서 합계와 평균을 구한 뒤 평균을 반환합니다.
    const sum = el.grades.reduce(function(acc,cur){
      return acc + cur; 
    },0 )
    const avg = sum / el.grades.length; 

    el.grades  = avg; 
    return el; 
  });
}

 

관련글 더보기