본문 바로가기

Web

[JavaScript] 고차 함수, 내장 고차 함수

일급 객체


  • 변수에 할당할 수 있습니다.
  • 다른 함수의 전달인자로 전달될 수 있습니다.
  • 다른 함수의 결과로서 리턴될 수 있습니다.

대표적인 일급 객체에는 함수가 있고, 함수를 변수에 할당할 수 있기 때문에 함수를 배열 요소나 객체의 속성값으로 저장할 수 있습니다. 즉 함수를 데이터처럼 다룰 수 있습니다.

고차 함수


  • 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수
  • 고차 함수의 전달인자로 전달되는 함수를 콜백 함수 (callback function) 라고 함
  • 커링 함수 : 함수를 리턴하는 함수

내장 고차 함수


  • js에는 기본적으로 내장된 고차 함수가 있음
  • 배열 메서드 중 일부가 대표적인 내장 고차 함수 -> filter, map, reduce, forEach, find, sort, some, every

filter

  • 모든 배열 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메서드
  • 조건은 함수의 형태로 filter 메서드의 전달인자로 전달됨 => 함수를 전달인자로 받으므로 고차 함수
  • filter 메서드는 배열 요소를 콜백 함수에 전달하고, 콜백 함수 내부의 조건에 따라 참 또는 거짓을 리턴
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result1 = words.filter(word => word.length > 6);
const result2 = words.filter(function(word){ return word.length>6;});
console.log(result1); // [ 'exuberant', 'destruction', 'present' ]
console.log(result2); // [ 'exuberant', 'destruction', 'present' ]

map

  • 배열의 각 요소가 특정 처리(함수)에 의해 다른 요소로 지정(map)된 새로운 배열을 리턴
console.log();
var arr = [1,2,3,4,5];
var arr2 = arr.map(function(a){ return a%2==0?'짝수':'홀수'});
console.log(arr2); // [ '홀수', '짝수', '홀수', '짝수', '홀수' ]

reduce

  • 배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 응축
  • 기본 사용법은 array.reduce(function(이전값, array[i], index) { return 리턴값;}, 이전값의 초기값);
  • map, include, find 등 모든 기능을 구현할 수 있음
var arr = [1,2,3,4,5];
var arr2 = arr.reduce(function(acc, cur){ return acc*cur;}, 1);
console.log(arr2); // 120

result = arr.reduce((acc, cur) => {
    acc.push(cur % 2 ? '홀수' : '짝수');
    return acc;
  }, []);
  console.log(result); 
// [ '홀수', '짝수', '홀수', '짝수', '홀수' ]

// 홀수만 넣기
result = arr.reduce((acc, cur) => {
    if (cur % 2) acc.push(cur);
    return acc;
  }, []);
  console.log(result); // [1, 3, 5]

forEach

  • 주어진 콜백 함수를 배열 요소 각각에 대해 실행
  • undefined를 반환
const arr = ['a', 'b', 'c'];

arr.forEach(el => console.log(el));
// a
// b
// c

find

  • 조건을 만족하는 첫번째 원소를 반환하는 메서드
  • 조건을 만족하는 원소가 없을 경우 undefined를 반환
const arr1 = [5, 12, 8, 302, 20];
const found = arr1.find(el => el >= 300);
console.log(found); // 302

sort

  • 기본적으로 오름차순으로 정렬
const arr = new Array(5, 7, 6, 1, 4, 2, 3);
arr.sort();
console.log(arr); // [1, 2, 3, 4, 5, 6, 7]

some / every

  • some은 배열 내의 원소 중 조건을 만족하는 원소가 1개라도 있는지를 리턴하는 메서드
  • every는 배열 내의 모든 원소가 조건을 만족하는지를 return하는 메서드
let data=[
    {name:'jack', age:20},
    {name:'kevin', age:16},
    {name:'rick', age:27},
    {name:'marry', age:21},
    {name:'rilly', age:19}
]

let result = data.every(x=>{
    return x.age>=20;
});
console.log(result); // false

result = data.some(x=>{
    return x.age>=20;
});
console.log(result); // true

추상화


  • 복잡한 것을 압축해서 핵심만 추출한 상태로 만드는 것
  • 반복해서 사용하는 로직을 별도의 함수로 작성하는 것도 추상화의 예시
  • 생산성을 향상시키기 위한 목적으로 사용
  • 고차 함수에서 함수를 전달받아 처리하거나 함수를 리턴하는 것도 추상화

 

 

 

 

참고 :

 

https://develaniper-devpage.tistory.com/69

 

 

'Web' 카테고리의 다른 글

[JavaScript] 프로토타입  (0) 2022.09.22
[JavaScript] 객체 지향  (0) 2022.09.22
[JavaScript] 원시 타입(Primitive Type)과 참조 타입(Reference Type)  (0) 2022.09.06
[CSS] CSS Selector  (0) 2022.09.04
[CSS] Box Model, CSS 리셋  (0) 2022.09.04