> 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-9.-reduce-2.md).

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

**`reduce`**&#xB294; 잘 알아두면 정말 유용한 내장함수입니다.\
**reduce를 이용해서 객체를 반해보자!!**

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

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

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

```javascript
const alphabets = ['a', 'a', 'a', 'b', 'c', 'c', 'd', 'e'];
const counts = alphabets.reduce((acc, cur) => {
    if(acc[cur]) {
        acc[cur] += 1;
    } else {
        acc[cur] = 1;
    }
    return acc;
}, {}) //({}은 초기 accumulator가 됩니다. 즉 초기세팅으로 객체를 만든것입니다.)

console.log(counts);
```

```javascript
// 결과)
{a: 3, b: 1, c: 2, d: 1, e: 1}
a: 3
b: 1
c: 2
d: 1
e: 1
__proto__: Object
```
