본문 바로가기
코플릿 기록/JavaScript

고차함수 31 ★★★

by 뭉지야 2023. 1. 15.
728x90

#문제

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

  1. 남학생들의 정보는 리턴하는 배열에서 제외합니다.
  2. 'grades' 속성값은 평균값(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) {
  let onlyfemale = students.filter(num => num.gender === 'female');
  //여자만 고른거에서 grade값의 합을 먼저 구하자
  return onlyfemale.map(el => {
    let sum = el.grades.reduce((acc, cur) => acc+cur);
    let average = sum / el.grades.length;
    el.grades = average; // 평균을 구한걸 el.grades에 할당한거다.
    return el;
  }
  )
}
function studentReports(students) {
return students.reduce((acc, curr) => {
  if(curr.gender === 'female') {
    //grade더하기
    const sum =curr.grades.reduce((acc, curr) => acc + curr);
    //여기까지하면 grade전부더한값. 이걸 이제 
    curr.grades = sum / curr.grades.length;
    acc.push(curr);
  }
  return acc;
}, []);
}
728x90

'코플릿 기록 > JavaScript' 카테고리의 다른 글

데일리코딩3 (거듭제곱문제)  (0) 2023.01.16
고차함수32번  (0) 2023.01.15
고차함수 30번  (0) 2023.01.15
고차함수 29번  (0) 2023.01.15
고차함수 28번  (0) 2023.01.15