> For the complete documentation index, see [llms.txt](https://triplexlab.gitbook.io/vanilla-js/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://triplexlab.gitbook.io/vanilla-js/basics/07-array/07-8-reduce.md).

# 07-10. 배열내장 함수(reduce)

## 배열내장 함수

배열을 다룰 때 알고있으면 너무나 유용한 다양한 내장 함수들에 대하여 알아보겠습니다.

**`reduce`**&#xB294; 잘 알아두면 정말 유용한 내장함수입니다.

```javascript
const numbers = [1, 2, 3, 4, 5];

let sum = 0;
numbers.forEach(n => {
    sum += n;
});

console.log(sum)
```

```javascript
// 결과) 
15
```

위에 forEach로 반복문을 이용해서 배열에 있는 모든 원소를 더한 값을 보여주고 있다.

**`reduce`** 를 이용하면 이것을 한줄로 작성이 가능합니다.

**리듀서** 함수는 네 개의 인자를 가집니다.

1. 누적된 원소 accumulator (acc)
2. 현재 값 (cur)
3. 현재 인덱스 (idx)
4. 원본 배열 (src)

**리듀서** 함수의 반환 값은 누적된 원소에 할당되고, \
누적된 원소는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 됩니다.

```javascript
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, cur) => {
    return acc + cur;
}, 0); //(0은 초기 accumulator값이 됩니다.)
```

**`reduce`** 를 이용해서 평균을 구해보자

```javascript
const numbers = [1, 2, 3, 4, 5];

const avg = numbers.reduce((acc, cur, idx, src) => {
    if(idx === src.length - 1){
        return (acc + cur) / src.length;
    }
    return acc + cur;
}, 0); //(0은 초기 accumulator값이 됩니다.)
```

```javascript
// 결과)
3
```
