06
07

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
COMMENT