[릴레이 블로깅 챌린지]

98__dj·2023년 4월 25일

SEB_FE_후기

목록 보기
17/22
post-thumbnail

2주차 - 고차 함수 복습

고차 함수(higher order function) : 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수

  1. 다른 함수를 인자로 받는 경우
function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  return func(num);
}

let output = doubleNum(double, 5);
console.log(output); // -> 10
  1. 함수를 리턴하는 경우
function adder(added) {
  return function (num) {
    return num + added;
  };
}

let output = adder(4)(2); // -> 6
console.log(output); // -> 6
  1. 함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) {
  return num * 2;
}

function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}

doubleAdder(5, double)(3); // -> 13

내장 고차 함수

1. Filter

-> 조건에 맞는 데이터만 분류 할 때 사용

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

const isCreatedAt2003 = function (cartoon) {
 const fullYear = new Date(cartoon.createdAt).getFullYear()
 return fullYear === 2003;
}; 

// 출판 연도가 2003년인 책의 모음
const filteredCartoons = cartoons.filter(isCreatedAt2003); 

2. Map

-> 하나의 데이터를 다른 데이터로 매핑할 때 사용

cosnt cartoons =[
//...생략
];

// 만화책 한 권의 부제를 리턴하는 로직(함수)
const findSubtitle = function (cartoon) {
  return cartoon.subtitle;
}; 

// 각 책의 부제 모음 
const subtitles = cartoons.map(findSubtitle); // ['어머니의 쌀', ...]

3. Reduce

-> 여러 데이터를 하나의 데이터로 응축할 때 사용

cosnt cartoons =[
//...생략
];

/ 단행본 한 권의 평점을 누적값에 더한다.
const scoreReducer = function (sum, cartoon) {
  return sum + cartoon.averageScore;
}; 

// 초기값에 0을 주고, 숫자의 형태로 평점을 누적한다.
let initialValue = 0 
// 모든 책의 평점을 누적한 평균을 구한다.
const cartoonsAvgScore = 
      cartoons.reduce(scoreReducer, initialValue) / cartoons.length;

0개의 댓글