이 영역을 누르면 첫 페이지로 이동
hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

페이지 맨 위로 올라가기

hoonDEV

ES6에서 배열을 활용하는 다양한 방법

  • 2020.06.25 03:59
  • 공부/JavaScript

기존의 forEach()

배열 전체를 돌며 해당 배열의 요소에 어떠한 작업을 수행할 수 있는 메소드이다.

사용법

arr.forEach((element, index, arr) => { 작업 });
(return은 undefined)

예시

let arr = [1, 2, 3];
let arr2 = [];
arr.forEach((element, index, arr) => {
  console.log('현재 값은 ' + element + '이며, 인덱스는 ' + index + '입니다.'); // A
  arr2.push(element * index); // B
  element *= 2;
  /*
  현재 값은 1이며, 인덱스는 0입니다.
  현재 값은 2이며, 인덱스는 1입니다.
  현재 값은 3이며, 인덱스는 2입니다.
  */
}, []);
console.log(arr); // [ 1, 2, 3 ]
console.log(arr2); // [ 0, 4, 12 ]

A와 B와 같이 배열의 원소들을 이용해 다양한 작업을 할 수 있다.

눈여겨볼 점은 콜백 내부에서 element *= 2를 해줬음에도 불구하고, 기존 배열의 값은 변하지 않았음을 알 수 있다. 즉, 기존의 값은 변경시키지 않는 메소드이다. (immutable)

콜백 내부에서 element, index, arr를 이용하여 아래에서 소개할 filter(), map(), find(), reduce()와 같은 기능들을 구현할 수 있다. 그러나 매번 이를 구현하기는 매우 귀찮으므로, ES6에서는 아래와 같은 훌륭한 메소드들을 제공한다.

filter()

기존의 배열에서 조건에 맞는 원소만 뽑아 새로운 배열을 만들어 리턴한다.

사용법

arr.filter((element, index, arr) => { return (condition) });

예시

let arr = [1, 2, 3, 4, 5, 6];
let arr2 = arr.filter((i) => i % 2 === 0);
console.log(arr[1] === arr2[0]); // true

첫 번째 출력 : arr에 있는 원소와 같은 원소임을 알 수 있음.

find()

찾으려는 값을 리턴한다. 여러 개가 있을 경우 처음 값만 리턴한다.

사용법

arr.find((element, index, arr) => { return (condition) });

예시

let arr = [1, 2, 3, 4, 5, 6];
let value = arr.find((i) => i % 2 === 0;
console.log(value); // 2
console.log(arr[1] === value); // true

첫 번째 출력 : arr의 여러 2의 배수인 원소들 중 첫 번째 원소만 리턴됨.
두 번째 출력 : arr[1](2)와 value(2)는 같은 원소임을 알 수 있음.

map()

반복문을 돌면서 배열의 요소 각각에 대해 인자로 넘겨준 콜백 함수를 적용시킨다(매핑한다).

사용법

arr.map((element, index, arr) => { return (new element) });

예시

let arr = [1, 2, 3, 4, 5, 6];
let arr2 = arr.map((i) => i * 2);
console.log(arr); // [1, 2, 3, 4, 5, 6]
console.log(arr2); // [2, 4, 6, 8, 10, 12]

첫 번째 출력 : arr의 원소들의 값은 변하지 않았다. 즉, map은 immutable한 메소드이다.
두 번째 출력 : arr2의 원소들은 arr의 각각의 원소 i에 대해 i * 2한 것이다.

reduce()

뭔가 말로 설명하기가 굉장히 애매한 메소드.. 이지만, 굉장히 많은 곳에서 사용된다. 예시를 통해 체득하자.

사용법

arr.reduce(
    (accumulator(누적값), currentValue(현재값), index, arr) => {
        return (new element)
    }, 초기값);

초기값 1을 부여했을 때

let arr = [1, 2, 3, 4, 5, 6];
let arr2 = arr.reduce((acc, cur, i) => {
  console.log(acc, cur, i);
  return acc + cur;
  /*
  1 1 0
  2 2 1
  4 3 2
  */
}, 1);
console.log(arr2); // 7

초기값으로 1을 주고, reducing을 진행한 결과이다. 콜백 내부의 출력을 통해 알 수 있듯이, 1을 초기값으로 Accumulating이 진행되는 모습을 볼 수 있다.

초기값이 없을 때

let arr = [1, 2, 3, 4, 5, 6];
let arr2 = arr.reduce((acc, cur, i) => {
  console.log(acc, cur, i);
  return acc + cur;
  /*
  1 2 1
  3 3 2
  */
});
console.log(arr2); // 6

초기값을 주지 않으면 기본적으로 0이 초기값이다. 이 경우, 콜백 내부의 출력에서는 초기값의 Accumulating 과정은 없으므로 출력되지 않는다.

reduce() 콜백 내부에서의 출력을 보면 다음 acc의 값이 현재 acc의 값과 cur이 더해져 갱신되는 것을 볼 수 있다.

활용 예시

let arr = [1, 2, 3];
let arr2 = arr.reduce((acc, cur, i) => {
  console.log(acc, cur);
  acc.push(cur % 2 ? 'Odd Number' : 'Even Number');
  return acc;
  /*
  [] 1
  [ 'Odd Number' ] 2
  [ 'Odd Number', 'Even Number' ] 3
  */
}, []);
console.log(arr2); // [ 'Odd Number', 'Even Number', 'Odd Number' ]

초기값을 빈 배열로 할당해준 후, 배열의 원소가 짝수인지, 홀수인지 판단하여 acc의 배열에 push() 해주는 콜백을 받는 reduce()이다. 이 로직은 똑같이 map()으로도 구현할 수 있다.

콜백 내부의 출력의 양상을 보자.
첫 번째 출력에서 acc는 빈 배열, cur는 1이다. cur이 1이고, 1은 홀수이므로, 다음 acc는 Odd Number라는 문자 1개가 들어 있는 배열이다.

이렇게 reducer()는 acc를 계속 cur의 값에 대해 갱신(누적)시켜 리턴해주는 메소드이다.

'공부 > JavaScript' 카테고리의 다른 글

JavaScript에서의 this와 this 바인딩  (0) 2020.06.27
ES6에서 Arrow Function 사용하기  (0) 2020.06.26
ES6에서 let/const로 Block-scoped 변수 선언하기  (0) 2020.06.26
JavaScript에서 var를 사용하면 안되는 이유  (0) 2020.06.26
JavaScript ECMAScript란?  (0) 2020.06.26

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • ES6에서 Arrow Function 사용하기

    ES6에서 Arrow Function 사용하기

    2020.06.26
  • ES6에서 let/const로 Block-scoped 변수 선언하기

    ES6에서 let/const로 Block-scoped 변수 선언하기

    2020.06.26
  • JavaScript에서 var를 사용하면 안되는 이유

    JavaScript에서 var를 사용하면 안되는 이유

    2020.06.26
  • JavaScript ECMAScript란?

    JavaScript ECMAScript란?

    2020.06.26
다른 글 더 둘러보기

정보

hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

  • hoonDEV의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그

카테고리

  • 분류 전체보기 (91)
    • 일상 (13)
      • 후기 (1)
      • 계획 (11)
    • 공지사항 (1)
    • 알고리즘 (54)
      • 문제풀이 (53)
      • 이론 (1)
    • 공부 (19)
      • React (0)
      • Angular (5)
      • Java (3)
      • C, C++ (3)
      • JavaScript (6)
      • WEB (2)
    • 디자인 (1)
      • UI, UX (1)
    • 개발 (0)
      • boom (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • es6
  • 백준
  • 알고리즘
  • 이분탐색
  • 문제풀이
  • 그리디
  • dp
  • javascript

나의 외부 링크

정보

훈개발자의 hoonDEV

hoonDEV

훈개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 훈개발자. Designed by Fraccino.

티스토리툴바