function studentReports(students) {
Step1. 남자를 제외한 배열을 만든다.
let num = 0;
let femaleArr = students.filter(student => student.gender === 'female')
Step2. Step1에서 만든 요소들 중 grades를 담고있는 배열을 뽑아온다.
let getScore = femaleArr.map(females => females.grades)
console.log(getScore)
Step3. step2에서 뽑아온 점수의 평균을 낸다.
let getAverage = getScore.forEach(score => score.reduce((subjectScore1, subjectScore2) =>
subjectScore1 + subjectScore2,0))
Step3. 평균을 낸 점수를 step1의 점수로 값을 교체해준다.
console.log(femaleArr)
}
----------------------------
위의 방식대로 하면 문제가 생긴다.
getAverage = [[1,2,3],[2,3,4]]
getAverage.forEach(function(scores){
scores.redcue( function (sub1,sub2){
res = sub1 + sub2
return res;
})
})
1. score[0] = [1,2,3,4] // [1+2+3+4] => 10
2. score[1] = [2,3,4] // [2+3+4] = 9
// 1. reduce의 최종값을 저장할 수 없다.
// 2. 저장해도 평균을 구하기 위해서 불필요한 작업들을 해야한다.
step3에서 각각의 배열안에 들어있는 점수들은 더할 수 있지만 score.length가 reduce의 결과가
리턴되는 순간 사라지기 때문에 각각의 배열안에 있는 score.length를 구하기 위한 변수를 다시 만들어야 한다.
function studentReports(students) {
let femaleArr = students.filter(student => student.gender === 'female')
return femaleArr.map(function(females){
let addScroes = females.grades.reduce((subject1, subject2) => subject1+subject2,0);
let getAverage = addScroes / females.grades.length
females.grades = getAverage
return females
});
}
댓글