본문 바로가기
프로그래밍/개발 언어

고차함수 코플릿

by monicada 2022. 5. 24.
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;
  };
}

고차함수 조건 추가(

  1. 객체의 'status' 속성값이 'fail'인 경우,
  2. 'Something went wrong!'을 리턴해야 합니다.
  3. 객체의 'status' 속성값이 'success'인 경우,
  4. '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 [];
}

 

'프로그래밍 > 개발 언어' 카테고리의 다른 글

프로토타입과 클래스  (0) 2022.05.25
클래스와 인스턴스  (0) 2022.05.25
반복문  (0) 2022.05.18
문자열  (0) 2022.05.18
조건문  (0) 2022.05.18

댓글