🤓 나는 처음에 고차함수를 배운다고 들었을 때,
x^3, x^4함수처럼 방정식의 해가 3개, 4개인 함수들을 배우는 줄 알았다.
근데 코딩에서는 고차함수가 그냥 합성 함수더라.
📝 프로그래밍에서 정의하는 고차함수는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수를 말한다.
아래와 같은 고차함수들을 사용할 때 꼭 기억해야할 것들이 있다.
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 쓰면 됨