[JS] reduce함수에 대해 알아보자.

eunseok·2023년 3월 6일
1

js공부

목록 보기
2/27

js알고리즘 문제들을 풀어보던 중 reduce함수에 대해 알게되었고, reduce함수를 사용하면 코드를 더 간결하고 가독성 좋게 짤 수 있다고 생각해서 공부하고 정리 해 보려고 한다.

reduce 함수란?

reduce함수는 배열에 사용하는데, 배열의 각 요소마다 주어진 리듀서(함수)를 실행하고, 하나의 결과값을 반환하게 된다.
reduce함수는 네 개의 인자를 갖는다.

callback
배열의 각 요소에 대해 실행할 함수이고, 4가지 인수를 받는다

accumulator
누산기는 콜백의 반환값을 누적한다. 콜백의 첫 번째 값이기도 하다. initialValue를 제공한 경우에는 initialValue의 값이된다.

currentValue
처리할 현재 요소.

currentIndex Optional
처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작한다.

array Optional
reduce()를 호출한 배열.

initialValue Optional
callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생하게 된다.

사용 예제

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

배열의 모든 값을 더한 값을 반환하는 reduce함수이다.
0,1,2,3,4가 들어있는 배열에 reduce함수를 사용했고, 반환값을 누적하는 accumulator, 현재 처리할 배열의 값인 currentValue, 현재 처리할 배열의 인덱스를 알려주는 currentIndex와 처리할 배열 전체인 array가 인자로 들어갔다.

4번의 호출이 일어난다.
1번째 호출 -> accumulator(누적 값) = 0 currentValue = 1 currentIndex = 1, array = [0,1,2,3,4]
반환 값 = 1
2번째 호출 -> accumulator(누적 값) = 1 currentValue = 2 currentIndex = 2, array = [0,1,2,3,4]
반환 값 = 3
3번째 호출 -> accumulator(누적 값) = 3 currentValue = 3 currentIndex = 3, array = [0,1,2,3,4]
반환 값 = 6
4번째 호출 -> accumulator(누적 값) = 6 currentValue = 4 currentIndex = 4, array = [0,1,2,3,4]
반환 값 = 10

화살표 함수로 더 간단하게 사용할 수 있다.

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

함수 뒤에 초기 값을 줄 수 있다.

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

초기 값을 주게되면 accumulator가 10부터 시작하기때문에 최종 변환 값이 20이 나올 것이다.

문제 적용

프로그래머스의 간단한 예제이다.

배열의 전체를 전부 더하고, 배열의 길이만큼 나누면 되겠다 싶었다.

function solution(numbers) {
    var answer = numbers.reduce((a,c) => (a + c),0) / numbers.length;
    return answer;
}

1개의 댓글

comment-user-thumbnail
2023년 3월 9일

와 어렵네요 ㅠ 저도 알고리즘 문제를 풀어 볼 날이 빨리 다가와서 같이 공부했으면 좋겠습니다.

답글 달기