[개발기초] 고차함수 - 2주차 (3)

Hong·2022년 9월 25일
0
post-thumbnail

🤓 나는 처음에 고차함수를 배운다고 들었을 때,
x^3, x^4함수처럼 방정식의 해가 3개, 4개인 함수들을 배우는 줄 알았다.
근데 코딩에서는 고차함수가 그냥 합성 함수더라.

📝 프로그래밍에서 정의하는 고차함수는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수를 말한다.

그냥 쉽게 말하면 함수를 변수로 받을 수 있는 함수는 '고차함수(higher order function)'

고차함수 안에 변수로 들어가는 함수는 '콜백함수(callback function)'



아래와 같은 고차함수들을 사용할 때 꼭 기억해야할 것들이 있다.

map

-배열의 각 요소가
-특정 논리(함수)에 의해
-새로운 배열의 요소로 만들어진다

filter

-베열의 각 요소가
-특정 논리(함수)에 따라, 사실(boolean)일 때
-따로 분류해서 배열을 만들어낸다

reduce

-배열의 각 요소를
-특정 방법(함수)에 따라
-원하는 하나의 혀애로
-응축합니다.



🙃 고차함수는 sprint가 아니라 문제처럼 풀어서 재미있었던 문제들을 몇개 가져와봤다.

Question) 영화정보가 담긴 객체를 요소로 갖는 배열과 연도를 입력받아 해당 연도 이전의 영화를 요소로 갖는 배열을 리턴합니다.

function classicMovies(arr, year) {
  //1993년 이전의 객체들을 filter를 이용해서 뽑아낸다
  //뽑아낸 객체들 중에서 title과 director를 가져온다
  //이 가져온 두 요소를 합친 배열을 리턴한다
  let result = [];
  result = arr.filter(function(el) {
    return el.year < year
  })
  
  result = result.map(function(el) {
    return `${el.title} by ${el.director}`
  })
  return result
}

여기서 얻은 것들
1. filter함수가 설정해둔 조건에 해당하는 값들을 return해서 배열을 만들어내는 함수라는 것을 알게되었고
2. map을 통해 해당배열의 요소마다 fucntion을 적용하는 방법을 알게되었다.
+a ${el.title} by ${el.director} 처럼 백틱(`)은 문자열을 적어줄 때 사용하고 ${ }는 변수나 연산등을 넣어줄 때 사용한다.



Question) number타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 평균을 리턴합니다.

function computeAverageOfNumbers(arr) {
  // 빈배열을 입력받는 경우, 0을 리턴하고(그냥 문제에서 만들어준 조건임)
  // reduce함수를 통해 모든 배열의 합을 구하고
  // 이것을 배열이 가진 길이 length로 나눠서 배열의 합에 대한 평균을 구한다.
  if(arr.length === 0) {return 0}
  const sum = arr.reduce(function(acc, cur) {
    return acc + cur;
  })
  const length = arr.length
  return sum/length;
}

여기서 얻은 것들
1. reduce(acc, cur)의 사용법
2. 배열의 평균을 구할 때는 array의 length를 이용하자.



Question) 2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 (number)의 합을 리턴해야 합니다.

function sumOfArraysInArray(arr) {
  // concat으로 2차원 배열을 1차원 배열로 만든다
  // filter를 통해 배열 중 number type의 배열들만 true로 return한다.
  // reduce를 통해 number만 존재하는 array에서 모든 배열의 합을 구해낸다.
  const justArrays = arr.reduce(function(acc, cur) {
    return acc.concat(cur);
  })

  const onlyNumberArrays = justArrays.filter(function(el) {
    if(typeof el === 'number') {
      return true;
    }
  })

  const sum = onlyNumberArrays.reduce(function(acc, cur) {
    return acc + cur;
  }, 0)

  return sum;
}

여기서 얻은 것들
1. concat 함수가 하는 역할(문자열 합치기)
2. 조건문에서 number종류만 걸러내고 싶은 경우 typeof 쓰면 됨




💬 처음에 34개의 함수문제들 풀면서 머리좀 아팠는데, 그래도 이 문제들 덕분에 함수 안의 인자들을 어떻게 활용해야하는지 더 명확하게 알게 되었다. 근데 나 생각보다 잘 풀더라. 코딩 까막눈 약간은 탈출. Thank you!
profile
Notorious

0개의 댓글