함수들을 인자로 받아, 연속으로 실행해주는 콜백함수를 리턴하는 고차함수
문제
함수들을 입력받아 함수들이 입력된 차례대로 결합된 새로운 함수를 리턴해야 합니다.
입력
- 인자 1 : func1
number 타입을 입력받아 number 타입을 리턴하는 함수- 인자 2 : func2
number 타입을 입력받아 number 타입을 리턴하는 함수- 인자 N : funcN
number 타입을 입력받아 임의의 타입을 리턴하는 함수
출력
함수를 리턴해야 합니다.
리턴되는 함수는 정수를 입력받아 func1, func2, ..., funcN의 순으로 적용합니다.
주의 사항
입력되는 함수들의 수는 1개 이상이라고 가정합니다.
함수가 아닌 입력은 존재하지 않는다고 가정합니다.
입력받은 함수들이 어떤 일을 하는지는 중요하지 않습니다.
// 1. 반복문
function pipe(...funcN) { // rest parameter syntax
return function (num) {
let result = num;
for(let i = 0; i < funcN.length; i++) {
result = funcN[i](result)
}
return result
}
}
// 2. reduce method & arguments
function pipe() {
let arr = [...arguments]
//arguments 객체는 배열이 아니라서 배열 메소드를 위해 변환해줘야 한다.
return function (num) {
return arr.reduce((prev, curr) => curr(prev), num)
}
}
// 3. reduce method & rest parameter syntax
function pipe(...funcN) {
return function (num) {
return [...funcN].reduce((prev, curr) => curr(prev), num)
}
}
TIL
Rest 파라미터 vs arguments 객체
arguments함수에 전달된 모든 인수에 해당하는 Array 형태의 객체
Rest Parameters정해지지 않은 인수를 배열로 나타낸다.
❗️arguments 객체는 실제 배열이 아니고 rest 파라미터는 배열!
arguments 객체는 배열이 아니기에 배열로 변환하기 위한 특정 메소드가 있다.
Array.from() 혹은 전개연산자를 통해 객체를 배열로 변환할 수 있다!