자바스크립트
reduce라는 함수,
배열의 원소들을 누적시켜서 하나의 값으로 만들어주는 기능을 한다.
reduce((prev, curr) => {}, initial);
const arr = [1,2,3,4,5]
arr.reduce((x, y) => {
log(${x}+${y} = ${x+y})
return x+y
})
//1+2 = 3
//3+3 = 6
//6+4 = 10
//10+5 = 15
뒤에 값으로 연산을 계속 이어나간다.
즉,
arr.reduce((prev, curr) => {
(prev, curr) => {return x}
(prev, curr) => {return x}
(prev, curr) => {return x}
result
}, initial)
즉,
x 가 prev로 계속 들어가서 연산을 한다.
const arr = [1,2,3,4,5]
const sum = (x,y) => {x+y}
const result = arr.reduce(sum);
console.log(result); // 15
왜 사용하냐?
전통적인 for 문이나 while문을 대체할 수 있고,
가독성이 좋다.
함수마다 주어지는 그 임무만 수행하면되기때문에,
사이드이펙을 걱정하지 않아도된다.
평균치 구할때도, 좋다.
console.log(result / arr.length) //이런식으로 평균치 뽑기 가능.
const arr = [1,2,3,4,5]
const average = (sum, val, index, arr) => {
sum += val; //누적해줌
return index === arr.length - 1 ? sum / arr.length : sum //지금 인덱스가 마지막 인덱스 일때는, 평균치반환하고 아니면 sum이라는 누적값 반환시켜서 sum에 다시전달.
}
console.log(arr.reduce(average)) //3
const nums =[50, 10, 20, 80, 40];
const max = (x, y) => x > y ? x: y;
console.log(nums.reduce(max)); // 80