[Java Script]map, filter, reduce 동작 원리 알아보기

2023. 3. 29. 10:49· Java Script
목차
  1. map()
  2. filter()
  3. reduce()
반응형

자바스크립트에서 map(), filter(), reduce() 메소드는 배열 요소를 나열하거나, 특정 조건을 보여주는데 많이 사용된다.

이번 글에서는 해당 매서드들의 동작원리는 자세하게 알아보려고 한다.

// 아래 예제에서 모두 해당 데이터를 사용한다
const dataList = [
  {
    key: 1,
    text: 'hello',
  },
  {
    key: 2,
    text: 'everyone',
  },
  {
    key: 3,
    text: 'welcome',
  },
  {
    key: 4,
    text: 'to',
  },
  {
    key: 5,
    text: 'my blog',
  },
];

map()

// Array.prototype.map()
arr.map(callback(currentValue[, index[, array]])[, thisArg])
const mapResult = dataList.map((list) => list.text);
console.log(mapResult);
// output: ["hello", "everyone", "welcome", "to", "my blog"]

map() 매서드를 for문을 이용해 직접 구현하면 아래와 같이 구현할 수 있다.

const mapResult = (list) => {
  let result = []; // map()은 새로운 배열을 반환
  for (const i of list) {
    result.push(i.text);
  }
  return result;
};

const result = mockMap(dataList);
console.log(mapResult);
// output: ["hello", "everyone", "welcome", "to", "my blog"]

filter()

// Array.prototype.filter()
arr.filter(callback(element[, index[, array]])[, thisArg])

filter()와 map()의 구조는 거의 비슷하다.

const filterResult = dataList.filter((list) => list.text !== 'everyone');
console.log(filterResult);
// output: [
//   {
//     key: 1,
//     text: 'hello',
//   },
//   {
//     key: 3,
//     text: 'welcome',
//   },
//   {
//     key: 4,
//     text: 'to',
//   },
//   {
//     key: 5,
//     text: 'my blog',
//   },
// ]

filter()는 해당 조건에 만족하는 값을 출력한다.

const mockFilter = (list) => {
  let result = []; // filter() 역시 새로운 배열을 반환
  for (const e of list) {
    if (e.text !== 'everyone') {
      result.push(e); // 해당 조건에 맞는 객체를 push
    }
  }
  return result;
};

const result = mockFilter(dataList);
console.log(result);
// output: [
//   {
//     key: 1,
//     text: 'hello',
//   },
//   {
//     key: 3,
//     text: 'welcome',
//   },
//   {
//     key: 4,
//     text: 'to',
//   },
//   {
//     key: 5,
//     text: 'my blog',
//   },
// ]

reduce()

// Array.prototype.reduce()
arr.reduce(callback[, initialValue])

reduce() 메서드는 첫 번째 callback 함수에서 reducer() 함수를 실행하고 하나의 결과 값을 반환한다.

reducer() 함수는 네 개의 인자를 받는다.

  1. 누산기accumulator (acc): initialValue가 있을 경우 initialValue이며, 없을 경우 콜백의 반환값을 누적
  2. 현재 값 (cur)
  3. 현재 인덱스 (idx): initialValue가 있을 경우 0, 아니면 1부터 시작
  4. 원본 배열 (src)
const array1 = [1, 2, 3, 4];
const resultOfReducer = array1.reduce((accumulator, currentValue, currentIndex, array) => {
  console.log('accumulator', accumulator); // output: 10 11 13 16
  console.log('currentValue', currentValue); // output: 1 2 3 4
  console.log('currentIndex', currentIndex); // output: 0 1 2 3
  console.log('array', array); // output: [1, 2, 3, 4]
  return accumulator + currentValue;
}, 10);
console.log(resultOfReducer); // output: 20
// console로 확인해보자면 이와 같다
const reduceResult = array1.reduce((accumulator, currentValue, currentIndex, array) => {
  console.log('accumulator', accumulator);
  // output: 10 11 13 16
  // 두 번째 인자의 initialValue가 10이기 때문에 10에서 시작한다
  console.log('currentValue', currentValue);
  // output: 1 2 3 4
  // array1의 값을 하나씩 반환한다
  console.log('currentIndex', currentIndex);
  // output: 0 1 2 3
  // 현재의 index를 하나씩 반환 한다
  console.log('array', array);
  // output: [1, 2, 3, 4]
  // array1을 반환한다
  return accumulator + currentValue;
  // 두개의 값이 더한 채로 accumulator에 누적된다
}, 10);
console.log(reduceResult); // output: 20

reduce()로 문자열을 출력하면 아래와 같다.

const reduceResult = dataList.reduce((accumulator, currentValue, currentIndex, array) => {
  return accumulator + currentValue.text + ' ';
}, '');
console.log(reduceResult);
// output: "hello everyone welcome to my blog "

이를 for문으로 돌리면 아래처럼 작성할 수 있다.

const mockReducer = (list) => {
  let result = '';
  for (const data of list) {
    result += data.text + ' ';
  }
  return result;
};
console.log(mockReducer(dataList));
// output: "hello everyone welcome to my blog "
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java Script' 카테고리의 다른 글

[JavaScript] JavaScript의 비동기 처리 이해하기  (0) 2024.08.25
[JavaScript] Array에서 특정 데이터 개수 구하기 #reduce  (0) 2024.08.12
[Java Script ]new Map() 형식 forEach 하기  (0) 2023.03.30
[Java Script] textarea 글자 수 제한, 엔터키 입력 제한  (0) 2022.01.06
  1. map()
  2. filter()
  3. reduce()
'Java Script' 카테고리의 다른 글
  • [JavaScript] JavaScript의 비동기 처리 이해하기
  • [JavaScript] Array에서 특정 데이터 개수 구하기 #reduce
  • [Java Script ]new Map() 형식 forEach 하기
  • [Java Script] textarea 글자 수 제한, 엔터키 입력 제한
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ubuntu
  • 어플
  • 파이썬
  • 자바
  • GIT
  • 오블완
  • axios
  • 티스토리챌린지
  • mariadb
  • 수원역 맛집
  • 선택정렬
  • Queue
  • spring boot
  • 관상 어플
  • DB
  • docker
  • Spring
  • 수원 맛집
  • javascript
  • 도커
  • Nuxt
  • Java
  • WSL
  • github
  • 정렬
  • python
  • 강릉 맛집
  • 서울 맛집
  • 알고리즘
  • VUE

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
[Java Script]map, filter, reduce 동작 원리 알아보기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.