[부트캠프 js/Node] 210816 고차함수 기초 개념 복습

📌 고차함수 정의?

고차 함수(higher order function)는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수. 함수는 변수에 저장가능.

☑ 고차함수 종류

  • 다른 함수를 인자로 받는 경우

    function double(num) {
    return num * 2;
    }
    function doubleNum(func, num) {
    return func(num);
    }
    함수 doubleNum은 다른 함수를 인자로 받는 고차 함수입니다.
    함수 doubleNum의 첫 번째 인자 func에 함수가 들어올 경우 함수 func는 함수 doubleNum의 콜백 함수입니다.

  • 함수를 리턴하는 경우

    function adder(added) {
    return function (num) {
    return num + added;
    };
    }
    함수 adder는 다른 함수를 리턴하는 고차 함수입니다.
    adder는 인자 한 개를 입력받아서 함수(익명 함수)를 리턴합니다.
    리턴되는 익명 함수는 인자 한 개를 받아서 added와 더한 값을 리턴합니다.

  • 함수를 인자로 받고, 함수를 리턴하는 경우

    function double(num) {
    return num * 2;
    }
    function doubleAdder(added, func) {
    const doubled = func(added);
    return function (num) {
    return num + doubled;
    };
    }
    함수 doubleAdder는 고차 함수입니다.
    함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수입니다.
    함수 double은 함수 doubleAdder의 콜백으로 전달되었습니다.

📌 더 공부할 부분(js array method)

  • forEach
    foreach 반복문은 오직 Array 객체에서만 사용가능한 메서드입니다. (ES6부터는 Map,Set 지원)
    배열의 요소들을 반복하여 작업을 수행할수 있습니다.

  • find

    find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.
    const array1 = [5, 12, 8, 130, 44];
    const found = array1.find(element => element > 10);
    //console.log(found);
    // expected output: 12

  • sort

    sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.
    const months = ['March', 'Jan', 'Feb', 'Dec'];
    months.sort();
    console.log(months);
    // expected output: Array ["Dec", "Feb", "Jan", "March"]
    const array1 = [1, 30, 4, 21, 100000];
    array1.sort();
    console.log(array1);
    // expected output: Array [1, 100000, 21, 30, 4]

  • some

    const array = [1, 2, 3, 4, 5];
    // checks whether an element is even
    const even = (element) => element % 2 === 0;
    console.log(array.some(even));
    // expected output: true
    some은 callback이 참(불린으로 변환했을 때 true가 되는 값)을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callback 함수를 실행합니다. 해당하는 요소를 발견한 경우 some은 즉시 true를 반환합니다. 그렇지 않으면, 즉 모든 값에서 거짓을 반환하면 false를 반환합니다.

  • every

    every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다. Boolean 값을 반환합니다.(every는 callback이 거짓을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callbackFn 함수를 실행합니다. 해당하는 요소를 발견한 경우 every는 즉시 false를 반환합니다. 그렇지 않으면, 즉 모든 값에서 참을 반환하면 true를 반환합니다.)

📌 map 메서드

하나의 데이터를 다른 데이터로 맵핑(mapping) 할 때 사용.

const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]

다른 예시

const cartoons = [
  {
    id: 1,
    bookType: 'cartoon',
    title: '식객',
    subtitle: '어머니의 쌀',
    createdAt: '2003-09-09',
    genre: '요리',
    artist: '허영만',
    averageScore: 9.66,
  },
  {
    id: 2,
    // .. 이하 생략
  },
  // ... 이하 생략
]; // 만화책의 모음

const findSubtitle = function (cartoon) {
return cartoon.subtitle;
}; // 만화책 한 권의 제목을 리턴하는 로직(함수)
const subtitles = cartoons.map(findSubtitle); // 각 책의 부제 모음

📌 filter 메서드

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환.

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

📌 reduce 메서드

배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 응축. (reduction)

const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15

reduce()메서드는 이해가 더 필요한듯 하다. 다양한 예시와 문제들을 접해야 할것 같다.
제로초블로그_reduce

좋은 웹페이지 즐겨찾기