reduce 메서드

reduce 메서드는 배열을 하나의 값으로 축소합니다(리듀스). 예를 들어, 이 메서드를 사용하면 배열 요소의 합을 쉽게 찾을 수 있습니다(즉, 배열이 요소의 합이라는 하나의 값으로 축소됩니다).

reduce 메서드는 첫 번째 매개변수로 함수를 받으며, 이 함수는 첫 번째 요소부터 시작하여 배열의 각 요소에 대해 순차적으로 실행됩니다. 이 함수에는 4개의 매개변수를 전달할 수 있습니다. 이러한 매개변수가 존재하는 경우(필수는 아님), 첫 번째 매개변수에는 자동으로 중간 결과가, 두 번째 매개변수에는 배열 요소가, 세 번째 매개변수에는 배열 내 인덱스가, 네 번째 매개변수에는 배열 자체가 전달됩니다.

중간 결과는 reduce 메서드가 배열의 모든 요소를 순회한 후 반환할 값을 누적하는 변수입니다. 예를 들어, 배열 요소의 합을 순차적으로 누적할 수 있습니다: 처음에는 첫 번째 요소를 넣고, 다음 루프에서는 첫 번째와 두 번째 요소의 합을, 그 다음에는 첫 번째, 두 번째, 세 번째 요소의 합을 넣는 식입니다. 이 과정은 배열이 끝날 때까지 계속됩니다. reduce가 받는 함수는 새로운 중간 결과 값을 반환해야 합니다.

reduce 메서드의 두 번째 매개변수는 중간 결과의 초기값을 지정합니다. 지정하지 않으면 초기값은 배열의 첫 번째 요소가 되며, 요소 처리는 두 번째 요소부터 시작됩니다.

구문

javascript배열.reduce(function(중간결과, 요소, 인덱스, 배열) {
  return 새로운 중간결과;
}, 초기값);

예제

배열 요소의 합을 구해봅시다:

javascriptlet arr = [1, 2, 3, 4, 5, 6];

let res = arr.reduce(function(sum, elem) {
  return sum + elem;
}, 0);

console.log(res);

코드 실행 결과:

javascript21

예제

배열의 모든 양수의 합을 구해봅시다:

javascriptlet arr = [1, -2, -3, 4, 5, -6];

let res = arr.reduce(function(sum, elem) {
  if (elem >= 0) {
    return sum + elem;
  } else {
    return sum;
  }
}, 0);

console.log(res);

코드 실행 결과:

javascript10

함께 보기

  • 유사한 작업을 수행하는 메서드 reduceRight,
  • 배열 요소를 필터링할 수 있는 메서드 filter,
  • 배열의 각 요소에 함수를 적용할 수 있는 메서드 map와 forEach,
  • 배열 검사를 수행하는 메서드 some 와 every,