고차함수

이정원·2022년 7월 15일
0

filter() 함수: 원하는 값을 추출하여 return하는 함수이다.

예시

var cartoons = [{id: 1, bookType: 'cartoon', title: '식객', subtitle: '쌀밥', publish: '2003'},
{id: 2, bookType: 'cartoon', title: '식객', subtitle: '귀리', publish: '2005'},
{id: 3, bookType: 'cartoon', title: '식객', subtitle: '보리', publish: '2003'}];

var isPublish2003 = function(cartoon){
    var fullYear = new Date(cartoon.publish).getFullYear()
    return fullYear === 2003;
};
var publishCartoon = cartoons.filter(isPublish2003);

console.log(publishCartoon);

출판일이 2003년인 책의 정보를 출력하는 코드이다.

getFullYear을 통해서 cartoon.publish로 접근하여 얻은 출판년도 네자리 값을 fullYear에 할당한다.

할당받은 fullYear의 값이 2003년과 일치하면 cartoons.filter로 값을 리턴하여 publishCartoon의 정보를 할당한다.

이렇게 return값에 조건을 명시하여 원하는 값을 추출할 수 있다는 점을 알 수 있다.

map() 함수: 모든 요소에 동일한 조건을 부여하여 값을 return하는 함수이다.

var cartoons = [{id: 1, bookType: 'cartoon', title: '식객', subtitle: '쌀밥', publish: 2003},
{id: 2, bookType: 'cartoon', title: '식객', subtitle: '귀리', publish: 2005},
{id: 3, bookType: 'cartoon', title: '식객', subtitle: '보리', publish: 2003}];

var findSubtitle = function(cartoon){
    return cartoon.subtitle;
};
var subtitles = cartoons.map(findSubtitle);

console.log(subtitles);

subtitle을 출력하는 코드이다.

map함수로 findSubtitle을 호출하여 배열의 subtitle값을 다시 리턴받아 subtitles에 할당한다.

각각의 정보를 하나씩 가져올 수 있다.

다음으로 설명할 reduce함수와 비슷하며 foreach문으로 대체 할 수 있다.

reduce() 함수: 배열을 하나의 값으로 만들어 준다.

var cartoons = [{id: 1, bookType: 'cartoon', title: '식객', subtitle: '쌀밥', reviewscore: 9.89, publish: 2003},
{id: 2, bookType: 'cartoon', title: '식객', subtitle: '귀리', reviewscore: 9.09, publish: 2005},
{id: 3, bookType: 'cartoon', title: '식객', subtitle: '보리', reviewscore: 9.69, publish: 2003}];

var scoreReduce = function(sum, cartoon){
    return sum + cartoon.reviewscore;
};
var initialValue = 0
var cartoonsAvgscore = cartoons.reduce(scoreReduce, initialValue) / cartoons.length;
console.log(cartoonsAvgscore);

배열의 평점의 평균값을 구하는 코드이다.

reduce함수로 scoreReduce를 호출하고 초기값은 initialValue를 0으로 초기화 시켰기 때문에 0이다.

*초기값을 설정하지 않으면 배열이 가장 첫번째 부분으로 설정된다.

sum에 각각의 배열의 요소에 있는 평점 값을 가져와 더하고 return하여 scoreReduce로 값을 할당한다.

할당받은 값을 배열의 크기로 나눠 평점의 평균값을 cartoonsAvgscore에 할당한다.

초기화 시킨 initialValue에 각각의 평점을 더해준다고 생각하면 된다.

foreach문으로 대체 가능하다.

이로써 고차함수 filter(), map(), reduce()의 사용법 그리고 기능과 동작원리를 알 수 있었다.

profile
Study.log

0개의 댓글