Node.js/JavaScript

[js 메서드] 배열.reduce()

왈왈디 2023. 6. 16. 14:42
728x90

배열에 사용하는 reduce()메서드는 배열의 각 요소에 콜백 함수를 실행하여 `하나의 값`을 반환한다.

이때 accumulator를 사용할 수 있는 것이 특징적인데, 

accumulator라는 인자를 사용하여,

요소를 순회하며 콜백을 실행할 때 accumulator에 값을 저장해 다음 요소의 콜백에 넘길 수 있다.

 

아래와 같이 reduce 메서드는 callback 함수와 initial value 두 개의 인자를 받는다.

initial value는 accumulator의 초기값으로, 입력하지 않으면 배열[0]이 할당된다.

arr.reduce(callback, initialValue)

callback함수최대 4개의 인자를 아래 순서대로 받는다.

currentIndex와 array는 생략 가능하다.

 

1. accumulator: 매 실행마다 누적되는 값으로 처음에는 reduce 메서드의 두 번째 인자로 입력한 초기값이다.

2. currentValue: 매 실행마다 바뀌는 배열의 각 요소.

3. currentIndex: 매 실행마다 바뀌는 배열의 각 요소의 위치.

4. array: 현재 처리 중인 배열.

 

initial value 입력 여부에 따라 달라지는 메서드 실행 방식을 예시와 함께 알아보자.

 

아래는 initial value를 입력하지 않은 경우이며, 이때 accumulator의 초기값은 배열의 첫번째 요소(array[0]) 값이다. 

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
});

callback함수는 총 4번 실행되며 실행 과정은 아래와 같다.

 

callback accumulator currentValue currentIndex 결과값
1번째 호출 0 1 1 1
2번째 호출 1 2 2 3
3번째 호출 3 3 3 6
4번째 호출 6 4 4 10

최종 반환되는 결과값은 10이다.

callback함수는 아래와 같이 arrow function으로도 표현 가능하다.

[0, 1, 2, 3, 4].reduce( (prev, curr) => prev + curr );

 

아래는 initial value를 10으로 할당한 경우이며, 이 경우 callback 함수가 5번 실행된다.

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
}, 10);

 

callback accumulator currentValue currentIndex 결과값
1번째 호출 10 0 0 10
2번째 호출 10 1 1 11
3번째 호출 11 2 2 13
4번째 호출 13 3 3 16
5번째 호출 16 4 4 20

최종 반환되는 결과값은 20이다.

 

합산 외에 배열 내 최대값을 찾는 방식으로 reduce() 메서드를 활용해보자.

const numbers = [3, 7, 2, 9, 1, 5];

const max = numbers.reduce((accumulator, currentValue) => {
  return Math.max(accumulator, currentValue);
});

console.log(max); // 9

배열의 요소가 객체일 때도 객체의 특정 프로퍼티에 대한 계산을 위해 사용할 수 있다.

var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
    return accumulator + currentValue.x;
},initialValue)

console.log(sum) // logs 6

 

코딩테스트에서 매우 유용하게 사용되는 reduce()메서드.

모르면 완전 손해다.

 

더 다양한 사용 예시는 아래의 공식 문서를 참고하자.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org

 

728x90