공식문서를 보고 이해가 썩 잘 되지는 않아서 그냥 나름대로 이것저것 찾아보면서
reduce()메서도의 아주 기본 개념만을 살펴봤습니다.
가장 먼저 단순히 1~4까지의 배열을 모두 더해야할 때,
[1, 2, 3, 4].reduce((a, c) => (a + c), 0)
함수의 첫번째 자리인 a는 누적값, c는 요소들의 각각의 현재값을 뜻합니다.
그리고 마지막에 0은 초기값을 뜻하는데,
누적값인 a의 초기값으로 이 친구가 들어갑니다.
a: 0, c: 1
이렇게 값이 들어가게 되고 a+c 함수로 계산이 되면 차례대로
a: 1, c: 2
a: 3, c: 3
a: 6, c: 4
이렇게 계산이 되면서 최종적으로 6+4로 10이라는 값이 리턴값이 됩니다.
여기서
[1, 2, 3, 4].reduce((a, c) => (a + c), 0) / [1, 2, 3, 4].length
이런식으로 평균값도 구할 수가 있습니다.
한번 더 스스로 이해를 돕기 위해 이번엔 곱하기로 해보겠습니다.
[1, 2, 3, 4].reduce((a, c) => (a * c), 1) // 0으로 곱하면 모두 0으로 나와서 1로 바꿨습니다.
a: 1, c: 1
a: 1, c: 2
a: 2, c: 3
a: 6, c: 4
최종 리턴값은 24가 되겠습니다.
reduce는 배열을 객체로도 전환할 수 있고,
배열의 메소드들을 거의 다 reduce로 대체가 가능하다고 합니다.
reduce를 이용해 배열을 객체로 바꿀 때에는,
['철수', '영희', '민지', '선미'].reduce((a, c, i) => { a[i] = c; return a }, {});
a가 누적값, c가 요소의 현재값이라면, i는 인덱스번호를 뜻합니다.
a: {}, c: '철수', i: 0
a: {0: '철수'}, c: '영희', i: 1
a: {0: '철수',1: '영희'}, c: '민지', i: 2
a: {0: '철수',1: '영희', 2: '민지'}, c: '선미', i: 3
이렇게 최종 리턴값은 a: {0: '철수',1: '영희', 2: '민지', 3: '선미'} 입니다.
만약 초기값을 넣지 않으면 배열의 첫번째 요소값이 초기값이 됩니다.
그리고 초기값으로 첫번째 요소가 들어가면 함수 두번째 자리의 c는 1부터가 아닌,
2부터 시작해서 세번만 반복합니다.
[1, 2, 3, 4].reduce((a, c) => (a + c))
a: 1, c: 2
a: 3, c: 3
a: 6, c: 4
이렇게 됩니다!
아직은 reduce를 활용해서 배열 각각의 더하거나 빼는 정도로만 활용하기 편한 정도이지만,
나중에 가서는 배열을 객체로, 객체를 배열로 등 다양하게 활용 가능하도록
연습해야겠다고 생각했습니다.