TIL 20.11.11

yuJaeWu·2020년 11월 11일
0

TIL

목록 보기
12/68
post-thumbnail

어제에 이어서..


어제 얘기가 나온 고차함수 메소드 중에서 오늘 살펴볼 것은

  • map()
  • filter()
  • reduce()
    이다.

요 세녀석들은 참으로 많이 사용되는 것 같은데 그중에서 map함수는 정말로
다른 작업을 하면서도 많이 구경을 했었다.
이제 차근차근 다시 복습해야한다.


filter


filter 메소드는 배열의 요소 중 특정 조건을 만족하는 요소들만을 걸러내는
이름 그대로 필터링의 기능을 담당하는 메소드이다. array의 메소드 이지만
고차함수에서 사용하기 때문에 그냥 고차함수 메소드라 봐도 될것같다.

-> 이처럼 특정한 함수를 인자로 받아서 배열의 값을 수정한뒤 반환해주는 것이다.
필터링의 기준이되는 특정 조건은 함수 형태로 filter 메소드의 인자로 전달되어야 한다.


map


map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.
즉 map함수의 콜백함수로 사용된 함수에게 각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 만든다. callback 함수는 (undefined도 포함해서) 배열 값이 들어있는 인덱스에 대해서만 호출된다.
즉, 값이 삭제되거나 아직 값이 할당/정의되지 않은 인덱스에 대해서는 호출되지 않는다. 빈값이라는게 없는셈.

-> 저기있는 콜백함수 (function이라 불리는)에 a라는 임의의 인덱스를 부여하여
순회시키며 조건을 걸어 원하는 값을 도출하는 셈.


reduce


이 친구가 진짜로 머리가 아픈데 이유는 직관적인 기능이 아닌,
복합적인 기능을 가지고 있기 때문이다.(그만큼 가장 강력함)
그만큼 유연한 대처도 가능한 만능메소드 이지만 조심스레 사용해야하는것도 있다.
협업에서는 가능하면 직관적인 모듈화가 필요한데 reduce는 자칫하다간
개발자들사이에서 혼선을 초래할수 있기 때문이다.

일단은 이렇다고 하니 조금더 신경써서 조심스레 알아가야 겠다.
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환한다.
map이 배열의 각 요소를 변형한다면 reduce는 배열전체를 변형한다.
예를 들어 배열에 들어있는 숫자를 더하거나,
평균을 구하는 것은 배열을 값 하나로 줄이는 동작이다.
하지만 reduce가 반환하는 값 하나는 객체일 수도 있고, 다른 배열일 수도 있다.

-> 여기서 콜백함수의 인자로 쓰인것은 reduce함수에서 중요한 역할을 한다.
acc는 누적값으로 리턴값으로 보면된다.
val은 현재요소를 말한다.
이 밖에도 현재요소의 인덱스 값이라던지 넣을수있는 옵션은 꽤나 많다.
두번째 인자를 사용할수있는데 이것은 initial value 라고 부른다.
callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용하는것. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생한다.

profile
어중간한 성공보다는 확실한 실패가 좋다.

0개의 댓글