내장 고차함수

최경락 (K_ROCK_)·2021년 12월 2일
0

내장 고차함수

  • JS 내부엔 이미 내장된 여러 고차함수들이 있음
  • 배열에 적용 할 수 있는 메소드들 중 일부를 그 예로 들 수 있다.

.filter()

  • 어떤 조건을 걸러 낼 수 있는 고차함수.
  • 인자로 걸러내고자 하는 조건을 가진 콜백함수를 받는다.
  • 배열.filter(function(배열의 요소, 인덱스, 받은배열){boolean}) 으로 사용한다.
  • filter의 인자로 사용되는 콜백함수는 boolean 값을 반환해야 하며, 배열의 내부의 요소들을 전달하여 해당 조건에 만족하는 값만 걸러내어 다시 배열로 리턴한다.
  • 원본은 그대로 유지한다.
let arr = [1, 2, 3, 4, 5, 6, 7, 8]

arr.filter((el) => {
  return el % 2 === 0 // 조건을 반드시 return 해주어야 한다.
})  

// [2, 4, 6, 8]

.map()

  • 각 요소를 조건에 맞는 다른 요소로 지정(mapping) 한 뒤 반환하는 고차함수.
  • 인자로 다른 요소로 지정하기 위한 로직을 가진 콜백함수를 받는다.
  • 배열.map(function(배열의 요소, 인덱스, 받은배열){로직}) 으로 사용한다.
  • 각각의 요소를 전부 순회하여 로직을 실행시키므로 일종의 반복문 처럼 사용 할 수도 있다.
  • 다시 정리하자면 배열의 각 요소에 콜백함수 내부의 과정을 거친 값을 다시 새로운 배열로 리턴한다.
  • 원본은 그대로 유지한다.
let arr = [1, 2, 3]

arr.map((el) => {
    return el * 2
  })

// [2, 4, 6]
  • 응용하기
    → 배열 내부의 객체에 새로운 키, 밸류를 추가하여 새로운 배열로 리턴하기
let userinfo =[
  {name : 'Ann', age : 12},
  {name : 'Mike', age : 20}
]

userinfo.map((user) => {
  return Object.assign({}, user, {  // 객체를 합치는 메소드
    isAdult : user.age > 19         // boolean 값으로 반환됨
  })
})

// 빈 객체에 user라는 각각의 객체와, isAdult를 가진 객체를 합치는 것.

//[
//  {name : 'Ann', age : 12, isAdult : false},
//  {name : 'Mike', age : 20, isAdult : true}
//]

.reduce()

  • 배열을 특정 로직에 따라 하나의 값으로 만드는 고차함수.
  • 배열.reduce(function(누적값, 현재요소, 인덱스, 받은배열){로직}, 초기값) 으로 사용한다.
  • 초기값은 콜백함수 다음 인자로 지정한다.
  • 초기값을 정할 수 있으며, 만약 정하지 않는 경우 초기값은 배열의 첫번째 값이 된다.
  • 원본은 그대로 유지한다.
let arr = [1, 2, 3, 4, 5]

arr.map((acc, cur) => { // acc : 누적값, cur : 현재값
  return acc + cur
})

// 15
// 초기값이 지정돼있지 않으므로,배열의 첫번째인 1이 초기값이 된다.
// 초기값(1)과 현재값(cur, 2)을 더하고, 해당 값을 누적값(acc)에 저장한다.
// acc 는 3이 되고, 이번 현재값인 3을 더하고, 그 결과를 acc에 저장한다.
// 이를 반복한다.
  • reduce의 연산과정
    1. 초기값을 가져온다.
    2. 가장 첫번째 요소와 더해 누적값에 저장한다.
    3. 누적값은 해당 값을 반환값에 저장하고, 이번 반복을 끝낸다.
    4. 다음 반복에서 이렇게 저장된 누적값과 다음 인덱스들의 요소를 더해나간다.
  • 숫자뿐만 아니라, 문자열이나 이중배열에서도 사용 할 수 있다.

+

  • reduce는 함수의 값을 응축시킨다고 생각하자.

일반 함수와 고차 함수의 차이

  • 일반 함수는 추상화가 이루어지기는 하지만, 단순하게 값을 받아 반환함.
  • 고차 함수는 이루어 지는 추상화가 단순 값이 아닌, 사고 그 자체를 의미하며, 함수가 해당 사고를 참고하여 값을 반환한다.
  • 즉, 높은 수준의 추상화를 가진 것을 고차 함수라고 한다.

~만 걸러내겠다. (filter)
값을 ~로 바꾸겠다. (map)
값을 ~하여 하나로 바꾸겠다. (reduce)

0개의 댓글