forEach로 배열의 값을 모두 더한다면 다음과 같다.
const numbers = [1, 2, 3, 4, 5];
let sum = 0;
numbers.forEach(n => {
sum += n
});
console.log(sum);
// 15
reduce를 사용하면 다음과 같이 나타낼 수 있다.
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, current) => accumulator + current, 0);
// acculator은 누적 값.
// 함수 뒤의 숫자가 acculator의 초기 값
// current는 배열의 각 원소들
// 함수의 문장이 실행되고 나면 그 결과 값이 acculator가 된다.
console.log(sum);
// 15
배열의 원소 값의 평균을 구하려면 다음과 같이 나타낼 수 있다.
const numbers = [1, 2, 3, 4, 5];
const avg = numbers.reduce((accumulator, current, index, array) => {
// index는 현재 원소의 순서
// array는 배열 자체
if (index === array.length - 1) {
// 원소의 순서가 배열의 길이(5)에서 1을 뺀 4가 됐을 때
// 원소의 수만큼 반복했을 때
return (accumulator + current) / array.length;
// 누적값 + 현재 원소 값 / 배열 갯수
}
return accumulator + current;
}, 0);
console.log(avg);
// 3
아래와 같이 문자열 배열에서도 사용할 수 있다.
(사실 이 부분은 이해가 잘 안된다...)
const alphabets = ['a', 'a', 'a', 'b', 'c', 'c', 'd', 'e'];
const counts = alphabets.reduce((acc, current) => {
if (acc[current]) {
acc[current] += 1;
} else {
acc[current] = 1;
}
return acc;
}, {});
console.log(counts);
// Object {a: 3, b: 1, c: 2, d: 1, e: 1}
// a: 3
// b: 1
// c: 2
// d: 1
// e: 1