JavaScript에서 reduce() 메서드를 사용하면 배열의 모든 요소를 순회하면서 하나의 값으로 줄일 수 있습니다. 가장 대표적인 활용 예는 배열에 담긴 숫자들의 합계를 구하는 것입니다.
reduce() 메서드란?
reduce() 메서드는 배열의 각 요소에 대해 콜백 함수를 실행합니다. 이때 콜백 함수는 두 가지 주요 인자를 받습니다.
- 누적값(accumulator): 이전 콜백 호출에서 반환된 값
- 현재값(currentValue): 현재 처리 중인 배열 요소
모든 요소를 처리한 후에는 최종적으로 누적된 단일 값을 반환합니다. 필요에 따라 두 번째 인자로 초기값(initial value)을 지정할 수도 있습니다.
예제 코드
다음은 reduce() 메서드를 사용해 배열 요소의 합계를 구하는 전체 코드입니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.result,
.sample {
font-size: 18px;
font-weight: 500;
color: red;
}
.result {
color: blueviolet;
}
button {
padding: 8px;
}
</style>
</head>
<body>
<h1>Reduce arrays javascript</h1>
<div><pre class="sample">[1,3,5,6,9,22,15]</pre></div>
<div class="result"></div>
<button class="Btn">Sum</button>
<h3>Click on the above button to sum the elements of the array</h3>
<script>
let resEle = document.querySelector(".result");
let BtnEle = document.querySelector(".Btn");
let sampleEle = document.querySelector(".sample");
let arr = [1, 3, 5, 6, 9, 22, 15];
sampleEle.innerHTML = arr;
BtnEle.addEventListener("click", () => {
resEle.innerHTML =
"Sum = " +
arr.reduce((sum, prev) => {
return sum + prev;
});
});
</script>
</body>
</html>위 코드에서는 arr.reduce((sum, prev) => { return sum + prev; }) 부분이 핵심입니다. 각 요소가 순회될 때마다 이전까지의 합계(sum)에 현재 요소(prev)가 더해지고, 모든 순회가 끝나면 최종 합계가 반환됩니다.
실행 결과
페이지를 실행하면 다음과 같이 샘플 배열과 'Sum' 버튼이 표시됩니다.

'Sum' 버튼을 클릭하면 −

버튼을 클릭하면 reduce() 메서드가 배열 [1, 3, 5, 6, 9, 22, 15]의 모든 요소를 더한 결과인 Sum = 61이 화면에 출력됩니다.
정리
reduce() 메서드는 합계뿐만 아니라 곱셈, 최댓값·최솟값 찾기, 객체 변환 등 다양한 용도로 활용할 수 있는 강력한 배열 메서드입니다. 초기값을 지정하면 빈 배열에서도 안전하게 동작하므로 상황에 맞게 활용해 보시기 바랍니다.