[ 06.03 ] 함수를 인자로갖는 배열 메소드 ( filter / map / reduce )

[Achievement Goal]

배열 내장 고차함수 에 대해 이해할 수 있다.
-filter / map / reduce / forEach / find / sort / some / every
추상화에 대해 설명 할 수 있다.
추상화의 관점에서 고차함수가 갖는 이점에 대해 설명할 수 있다.
고차함수를 활용하여 프로그램 작성할수 있다.

이전 블로그에서 고차함수란 ,
다른 함수를 인자로 받는 경우(콜백함수)나 함수를 리턴하는 경우를 말하였다.
그렇다면 내장 고차함수란 무엇일까?
함수를 인자로갖는 메소드를 말한다.

메소드도 함수의 종류 중 하나이며, 그 메소드 들 중 대표적인 배열의 내장 고차함수 메소드를 세가지 다뤄보겠다.

filter

모든 배열 요소 중 어떠한 조건을 만족하는 요소만 걸러내는 메소드이다.
기존배열 수정하지 않으며 내가 원하는 값만 반환 필터링을 거친다.
보통 찾고자하는 객체의 이름이나 어떤 종류인지, 짝/홀수인지 거르기 위해 사용된다.
filter 메소드의 인자에 올수있는것은,
콜백함수, 요소 가 기본적이며 옵셔널 하게 index (처리할 현재 요소의 인덱스.)
array (filter를 호출한 배열.) ,thisArg (callback을 실행할 때 this로 사용하는 값.) 이 올 수 있다.
보통은 filter(콜백함수,요소) 가 많이 쓰이는 것 같다.

예를들어 내가 찾고자 하는 값이 짝수라면

arr.filter(function(el){
  return el % 2 === 0
})

신기했던 점은, for 문같이 반복문을 쓰지 않더라도 어떠한 배열에 필요한 요소만 콕 찝어서 올 수 있다는 것인데 true 를 리턴하면 요소를 유지시키고, false 를 반환하면 요소를 버린다는 점이다.

return arr.filter(function(el){
    if(el == keep){
      return ture; 
    }else{
      return false; //filter 에서 false 라는 것은 버린다는 뜻.
    }
  })
  

만약 filter 의 콜백함수의 인자요소인 el 이 1이라면
arr에 있는 배열들 중 1을 제거할것이고 아니라면 arr 를 남긴다. 뭐 이렇게 되시겠다.
또한, filter 는 뭔가.. 음.. 느낌이 배열계의 반복문 메소드? 같은 느낌이다.
만약 배열의 길이를 리턴하고 싶다면
arr.filter(function(el){~~블라블라}).length
요로케 써주면 된다!!!
처음알음 .. ㅎ 마치 for 문에서 i < arr.length; 이렇게 썼던것처럼ㅋㅋㅋ

Map

어떠한 계산식을 해서 그 최종 계산식을 리턴.
마찬가지로 기존배열 수정하지 않음.
찾고자 하는 값과 '대응'되는 것을 알기 위해서는 map을 사용하기도 한다.

reduce

초기값. 없으면 배열맨첫번째가 초기값이 됨. 누적값에 기반됨.
그 다음요소부터 현재값이 됨.
누적값의 값으로 반환함.
배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 응축.
(누산기,현재값,현재인덱스,원본배열)
초기값이 없으면 자연스럽게 acc 가 0번째 인덱스가 된다.
acc 는 배열이어야 한다.
초기값에 따라서 누적값이 되는거임.
초기값이 0 이면 숫자형, '' 이면 문자형, []이면 배열
최대값, 최소값 찾을때 유용

sort
정렬 메소드
[5,3,4,2,1].sort(고차함수조건) => 오름차순, 내림차순 등등 정렬을 바꿀때 많이 사용하는 메소드로 볼 수 있다.

어떠한 값을 찾을때 무조건 정해진 메소드가 있는것은 아니지만,
상황에 따라서 더 편리한 메소드가 있는것은 분명하다.

좋은 웹페이지 즐겨찾기