1. reduce 의 이해
- 다짜고짜 코드부터 본다.
function studentReports(students) {
// TODO: 여기에 코드를 작성합니다.
// filter 로 여학생만 뽑는다
let onlyFemale = students.filter(students => students.gender === 'female');
// 성적을 모두 합산한다. 객체 안에 grades 가 배열로 들어가 있으므로 map으로 배열마다
return onlyFemale.map(function (el) {
// 인자를 grades 로 하고 reduce로 쌓는다.
let sumGrades = el.grades.reduce((acc, cur) => {
return acc + cur;
}, 0);
// 평균을 구하기 위해 나눈다.
let result = sumGrades / el.grades.length;
// grades를 계산한 평균으로 할당한다.
el.grades = result;
// 모든 요소를을 리턴한다.
return el;
});
}
- students의 값들 중에 키 grades는 '배열'로 입력 되고 있다.
- 이때, 그냥 reduce를 화살표 함수로 바로 사용하려고 했다.
function studentReports(students) {
// TODO: 여기에 코드를 작성합니다.
// filter 로 여학생만 뽑는다
let onlyFemale = students.filter(students => students.gender === 'female');
let sumGrades = onlyFemale.reduce((acc, cur) => {
return acc + cur;
} ,0)
- 이런 경우, onlyFemale의 값이 다수인 경우 배열들을 쌓은 것이기 때문에 각 배열이 합쳐진 이상한 형태가 나온다.
- 이럴때, 위의 코드 처럼 각 인자를 sumGrades 로 선언하고 계산하는 것이 옳은 방법일 것이다. 다른 경우,
function studentReports( studentList ) {
//여학생만 거름
let femaleList = studentList.filter( recode => recode.gender === 'female');
//reduce 로 각 grades 배열을 받아 온다.
femaleList.reduce( (acc, cur) => {
//그 배열에서 받아온 첫번째 인자를 다시 reduce로 합쳐준다.
cur.grades = cur.grades.reduce( (inAcc, inCur) => {
//더해준 값의 평균을 위해 길이로 나눠준다.
return inAcc + inCur }) / cur.grades.length;
}, 0);
return femaleList;
}
- 와 같은 식으로도 표현 가능하다.
- 화살표 함수와 일반 함수는 똑같이 기능하지만, 잘 모를때는 일반적인 형태로 사용해도 좋다.
우분투 오류로 인해 싹다 날리고 다시 깔았다.
내 맨탈도 함께 날아갔다...
오류의 원인은 알 수 없다. 그저 아침에 다시켰을때 오류로 인해 부팅이 아에 되지 않았다. 같이 깔려 있던 윈도우는 잘 작동 했으므로 전적으로 우분투의 알 수 없는 오류 인것 같다.
다시 설치한 우분투도 심지어 오류가 난다! 언어 서포트가 설치가 안되고, 터미널에서 다양한 설치 명령어가 안 될때가 많으며, 소프트웨어 센터도 맛이 가서 다시 인스톨 해 주었다.(물론 고쳐진것 같진 않다)
그래서 크게 공부를 하지 못 했다. 하지만 다이나믹한 삽질로 맨탈 공부가 되었다고 생각한다. 비록 작업물들도 날라가고 쪼오큼 슬프지만 일단은 작동하니 만족스럽다. 꼭 맥북을 사야겠다.
'Coding > Today I Learned' 카테고리의 다른 글
2021.06.08(Tue.) (0) | 2021.06.09 |
---|---|
2021.06.07(Mun.) <리액트의 라우터> (0) | 2021.06.07 |
2021.06.05(Set.) (0) | 2021.06.06 |
2021.06.04(Fri.) <JSX 문법의 기초> (0) | 2021.06.05 |
2021.06.03(Thu.) (0) | 2021.06.04 |