728x90
고차함수 이론
- 일급객체:
변수에 할당 가능
다른 함수의 전달인자로 전달 가능
다른 함수의 결과로서 리턴 가능 (함수를 리턴하는 함수를 커링함수라고 함)
javascript에서 함수는 일급객체
- 배열 내장 메서드(객체 안의 함수)
map: 배열의 각 요소에 콜백 함수를 적용시켰을 때, 새로운 배열을 리턴
filter: 배열의 각 요소에 콜백 함수를 적용시켰을 때, true를 리턴하는 요소들만 모은 새로운 배열을 리턴
reduce: 배열의 각 요소를 콜백 함수에 맞게 하나로 응축시킨 값을 리턴
기타 등등
문제풀이
일반적인 함수 리턴
function returnFunction() {
// TODO: 여기에 코드를 작성합니다.
return function () {
return'Hello HoF!';
}
}
값을 넣어 리턴
function functionParameter(func, num) {
// TODO: 여기에 코드를 작성합니다.
return func(num);
}
함수를 두번 리턴
function applyTwice(func, num) {
// TODO: 여기에 코드를 작성합니다.
return func(func(num));
}
함수에 순서를 넣어서 리턴
function compose(func1, func2, num) {
// TODO: 여기에 코드를 작성합니다.
return func1(func2(num));
}
결합된 새로운 함수를 리턴
function compose2(func1, func2) {
return function (num) {
return func1(func2(num));
};
}
결합된 함수를 차례대로 리턴
function pipe(...funcs) {
return function (num) {
let result = num;
for (let i = 0; i < funcs.length; i++) {
result = funcs[i](result);
}
return result;
};
}
고차함수 조건 추가(
- 객체의 'status' 속성값이 'fail'인 경우,
- 'Something went wrong!'을 리턴해야 합니다.
- 객체의 'status' 속성값이 'success'인 경우,
- 'data' 속성값에 입력받은 함수를 적용한 결과를 리턴해야 합니다.)
function callbackOnly(callback, response) {
if (response.status === 'success') {
return callback(response.data);
} else {
return 'Something went wrong!';
}
}
함수에 배열 선언
function mapCallback(func, arr) {
let result = [];
for (let el of arr) {
result.push(func(el));
}
return result;
}
배열 중 참인 것만 리턴
function filterCallback(func, arr) {
let result = [];
for (let el of arr) {
if (func(el)) {
result.push(el);
}
}
return result;
}
배열 중 일치하는 것 제거하여 리턴
function removeElement(arr, discarder) {
return arr.filter(function (el) {
if (el !== discarder) {
return true;
}
return false;
});
}
배열 중 일하는 것만 리턴
function keep(arr, keeper) {
// TODO: 여기에 코드를 작성합니다.
return arr.filter(function (el) {
if (el === keeper) {
return true;
}
return false;
});
}
배열을 입력받아 길이가 홀수인 것만 리턴
function filterOddLengthWords(words) {
return words.filter(function (el) {
return el.length % 2 !== 0;
});
}
num의 인덱스 리턴
function getIndex(arr, num) {
return arr.filter(function (el) {
return el < num;
}).length;
}
배열일 경우, 100보다 작은 값만 리턴
function lessThan100(number) {
return number < 100;
}
function getElementsLessThan100AtProperty(obj, property) {
const maybeArr = obj[property];
if (Array.isArray(maybeArr)) {
return maybeArr.filter(function (el) {
return typeof el === 'number' && lessThan100(el);
});
}
return [];
}
댓글