Array.prototype.reduce()
사용법
reduce()
함수는
배열의 모든 요소에 콜백 함수를 적용하여 하나의 결과 값을 생성하는 함수입니다.
reduce()
함수는 배열의 요소들을 하나로 줄여(reduce) 집계한 값을 반환합니다.
reduce()
함수의 형식은 다음과 같습니다.
구문
arr
은 reduce()
함수를 적용할 배열입니다.
매개변수
callbackFn |
배열의 각 요소를 처리하는 콜백 함수입니다.
콜백 함수의 매개변수: callbackFn(accumulator, currentValue[, currentIndex[, array]])
|
---|---|
initialValue |
옵션. 초기 누적 값입니다.
이 매개변수를 생략하면 첫 번째 배열 요소가 초기 누적 값으로 사용됩니다. |
첫 번째 매개변수인 콜백 함수(callbackFn
)과 관련되어 함수의 형태별 구문 형식은 다음과 같습니다.
반환 값
결과 값을 반환합니다.
배열이 비어 있고 initialValue
이 전달되지 않으면 오류가 발생합니다.
콜백 함수의 작동 원리
reduce()
함수의 콜백 함수는 배열의 각 요소에 대해 호출되며, 이전 단계에서 계산한 값을 누적(축적)하는 역할을 합니다. 콜백 함수의 작동 원리를 자세히 설명하겠습니다.
- 첫 번째 반복(iteration):
reduce()
함수가 호출되면 먼저 초기값(initialValue
)과 배열의 첫 번째 요소가 콜백 함수로 전달됩니다.accumulator
: 초기값(initialValue
)의 값이accumulator
변수에 할당됩니다.currentValue
: 배열의 첫 번째 요소의 값이currentValue
변수에 할당됩니다.- 콜백 함수가 호출되고, 이전 반복의 결과값(
accumulator
)과 현재 요소(accumulator
)를 활용하여 새로운 값을 반환합니다.
- 두 번째 반복(iteration)부터: 이후의 반복에서는 초기값(
initialValue
)은 사용되지 않습니다. 대신, 이전 반복의 결과값(accumulator
)과 현재 요소(currentValue
)가 콜백 함수로 전달됩니다.-
accumulator
: 이전 반복에서 반환된 값(이전 결과 값)이accumulator
변수에 할당됩니다. -
currentValue
: 다음 배열 요소의 값이currentValue
변수에 할당됩니다. -
콜백 함수가 호출되고, 이전 반복의 결과값(
accumulator
)과 현재 요소(currentValue
)를 활용하여 새로운 값을 반환합니다.
-
- 반복 종료: 배열의 모든 요소가 처리될 때까지 이 반복과 결과 값의 계산이 반복됩니다.
- 최종 결과 반환: 배열의 모든 요소가 처리된 후,
reduce()
함수는 마지막 콜백 함수 호출의 반환값을 최종 결과 값으로 반환합니다.
이러한 과정을 통해 배열의 요소를 순회하면서 콜백 함수를 반복적으로 호출하고, 그 결과를 누적하여 최종 결과 값을 집계합니다. 콜백 함수 내에서는 현재 요소와 이전 단계에서의 결과를 이용하여 원하는 연산을 수행할 수 있습니다.
reduce()
함수의 콜백 함수의 작동 원리를 설명할 때 currentIndex
와 array
매개변수는 선택 사항(옵션)이므로 필요에 따라 사용될 수 있는 것을 강조하지 않았습니다. 이 두 매개변수는 콜백 함수에서 필요한 경우에만 선택적으로 활용할 수 있습니다.
다양한 활용 사례
reduce()
함수는 주로 다음과 같은 예제의 목적으로 사용됩니다.
배열의 모든 요소를 더하기
배열의 모든 요소를 곱하기
위의 코드에서는 초기 누적 값으로 1을 사용하고, 각 요소를 곱하여 결과를 누적합니다. 초기 누적 값을 0으로 설정하면 모든 값이 0으로 곱해지므로 1을 사용하는 것이 중요합니다.
배열의 최솟값 찾기
위의 코드에서는 초기 누적 값을 배열의 첫 번째 요소인 $numbers[0]
으로 설정하고, 콜백 함수에서 현재 요소가 누적 값보다 작으면 현재 요소를 최솟값으로 선택합니다.
배열의 최댓값 찾기
위의 코드에서도 초기 누적 값을 배열의 첫 번째 요소로 설정하고, 콜백 함수에서 현재 요소가 누적 값보다 크면 현재 요소를 최댓값으로 선택합니다.
배열을 반환하는 방법
reduce()
함수를 사용하여 배열을 반환하는 방법은 콜백 함수 내에서 배열에 값을 추가하고 누적하는 방식으로 구현할 수 있습니다. 여기에 간단한 예제를 제시하겠습니다. 이 예제에서는 배열의 각 요소를 제곱하여 새로운 배열을 생성합니다.
코드 부연설명
push()
함수는 배열의 끝에 하나 이상의 요소를 추가(push, 뒤에서 밀어 넣기)하는 함수입니다.
이 예제에서, reduce()
함수는 빈 배열([]
)을 초기값으로 사용하고, 콜백 함수 내에서 각 요소를 제곱한 값을 accumulator
배열에 push()
함수를 사용해서 추가합니다. 최종적으로 누적된 배열이 반환되어 squaredArray
변수에 저장됩니다.
주어진 예제에서는 map()
함수를 사용하는 것이 더 간단하고 명확할 것입니다.
코드 부연설명
map()
함수는 배열을 순회해서 각 요소를 콜백 함수로 적용해서 처리해 모은 새로운 배열을 반환합니다.
map()
함수는 배열의 각 요소에 함수를 적용하고 그 결과로 새로운 배열을 생성하는 데에 특히 유용합니다. 아래는 동일한 작업을 map()
함수를 사용하여 수행하는 예제입니다.
map()
함수를 사용하면 요소 변환 작업이 명확하게 표현되며, 배열을 새로운 배열로 매핑할 때 사용하기에 더 적합합니다. reduce()
함수는 배열을 누적하거나 변환할 때 더 복잡한 작업에 유용합니다. 따라서 작업에 따라 더 적절한 함수를 선택하는 것이 중요합니다.
이러한 함수들은 코드를 더 읽기 쉽게 만들고, 작업을 간결하게 표현하는 데 도움을 줄 수 있습니다. 각 함수의 용도를 이해하고 적절하게 활용하는 것은 프로그래밍에서 중요한 스킬 중 하나입니다.
명세서
명세서 사양 | |
---|---|
reduce()
|
ECMAScript Language Specification #sec-array.prototype.reduce |
브라우저 호환성
메서드 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
reduce()
|
3 | 12 | 3 | 4 |