고차함수 filter vs map vs reduce

KoEunseo·2022년 8월 10일
0

파헤쳐보자

목록 보기
2/31

고차함수를 배웠고, 사용하고는 있는데 딱 이거다 감이 오지 않는다.
무작정 복습한다고 문제만 풀어보다가 어떤 상황에서 filter map reduce를 사용하는지 확실하게 구별해보는 것이 좋을 것 같다는 생각이 들었다.

나는 지금
filter는 배열에서 조건에 부합하는 요소들만 모아 리턴하고
map은 배열 내 요소에 같은 작업을 해서 가공해 모아 리턴하고
reduce는 결과값을 하나로 리턴한다? 정도로 구별하고 있다.
리듀스에 대해서 1도 모르네😭 이럴수가


filter()

배열과 임의의 값을 입력받아 기존 배열에서 임의의 값과 일치하는 요소가 제거된 새로운 배열 리턴
배열과 임의의 값을 입력받아 기존 배열에서 임의의 값과 일치하는 요소만을 갖는 새로운 배열 리턴
문자열을 요소로 갖는 배열을 입력받아 그 길이가 홀수인 요소만을 갖는 배열 리턴
정수를 요소로 갖는 배열과 정수(num)를 입력받아 num을 배열에 추가하고 정렬한다고 가정할 경우, num의 인덱스를 리턴
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 100보다 작은 요소들만 갖는 배열 리턴

배열(+ 임의의 값)이 주어지고, 여기에 조건을 주어서 filtering 함.
배열에서 특정 조건을 만족하는 값을 뽑아내고 싶을 때 사용.


map()

수를 요소로 갖는 배열을 입력받아 각 요소를 2배 곱한 새로운 배열을 리턴
문자열을 요소로 갖는 배열을 입력받아 각 요소의 길이를 요소로 갖는 새로운 배열을 리턴
수를 요소로 갖는 배열을 입력받아 각 요소가 2의 배수인지에 대한 정보를 요소로 갖는 새로운 배열 리턴
개인정보를 담고 있는 객체를 요소로 갖는 배열을 입력받아 각 객체의 특정 속성을 요소로 갖는 배열 리턴
개인 정보를 담고 있는 객체를 요소로 갖는 배열을 입력받아 이름 전체를 요소로 갖는 배열 리턴
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 배열의 각 요소를 제곱한 새로운 배열 리턴

배열이 주어지고, 배열의 각 요소에 가공을 함.
모든 배열 요소에 어떤 조작을 하고 싶을 때 사용.


reduce(acc, cur)

number타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 리턴
number타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 리턴
number타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 평균 리턴
객체를 요소로 갖는 배열과 문자열을 입력받아 각 요소의 'animal' 속성값이 문자열과 일치할 경우, 해당 요소의 'score' 속성값을 모두 더한 값 리턴
문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열 리턴
문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열의 길이 리턴
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열 리턴

배열(+ 문자열)이 주어지고, 조건에 따라 하나의 값으로 도출함.
누계값, 현재값을 인자로 가진다.


filter & map

개인 정보를 담고 있는 객체를 요소로 갖는 배열을 입력받아 18세 이상인 사람의 이름을 요소로 갖는 배열 리턴
영화 정보가 담긴 객체를 요소로 갖는 배열과 연도를 입력받아 해당 연도 이전의 영화를 요소로 갖는 배열 리턴

  1. 18세 이상을 필터링한 후 -> 2. 매핑하여 이름 출력
  2. 해당 연도 이전의 영화를 필터링 한 후 -> 2. 매핑하여 영화이름 출력

조건에 따라 필터링 한 후 필요한 값만 매핑해 출력하는구나!


filter & reduce

배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소 리턴
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 수(number)의 합 리턴

  1. 문자열인지 타입 여부 확인해 필터링한 후 -> 2. 가장 짧은 길이를 가진 문자열 리턴
  2. reduce로 a와 b concat -> 2. type 필터링 -> 3. 초기값으로 0을 주고 모든 수 reduce로 합산

필터링으로 type을 확인해주는구나!


filter & map & reduce

학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열 리턴

  • 남학생들의 정보는 리턴하는 배열에서 제외
  • 'grades' 속성값은 평균값(number 타입)으로 교체
  1. filter로 여학생만 거름 -> 2. reduce로 총합을 구한 후 평균값을 구한 걸 필터링된 여학생들에게 mapping

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글