reduce
함수는 배열이 주어졌을때, 배열의 원소를 모두 사용하여 어떠한 연산을 해야할 때 사용.
예를 들어 배열의 모든 원소의 합을 구할때,
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);
console.log(sum); // 15
reduce
함수의 매개변수로 어떠한 연산을 할지 기술해주는 callback function
과 초기값인 initialValue
를 넣어줘야 한다.
callback function
에서 입력으로 필요한 파라미터는
callback function
: (previousValue, currentValue, currentIndex, array)이다.
previousValue : 이전까지 연산된 값(누적된 값)
currentValue : 현재 값(배열의 각 원소 값)
currentIndex : 현재 인덱스(reduce에서 각 원소에 대해서 실행이 될때, 해당 원소의 index)
array : 배열(reduce 함수를 실행하고 있는 자기 자신)
그리고 함수 바디 부분에 어떻게 연산할지를 기술해 줘야 한다.
그리고 initialValue
는 연산의 기본 값이다.
또 다른 예로 reduce
함수를 이용하면, 배열의 원소들의 평균을 구할 수 있다.
const numbers = [1, 2, 3, 4, 5];
const avg = numbers.reduce((accumulator, current, index, array) => {
if (index === array.length() -1) {
return (accumulator + current) / array.length;
}
return accumulator + current;
}, 0);
console.log(avg); // 3
reduce
함수를 수 계산이 아닌 다른데 이용하기
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;
}, {});
console.log(counts); // {a:3, b:1, c:2, d:1, e:1};