얘는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환
const arr = [1,2,3,4];
const initialValue = 0;
const sumWithInitial = arr.reduce(
(previousValue, currentValue) => previousValue + currentValue,
initialValue
);
console.log(sumWithInitial); // 10
지금까지 reduce는 덧셈할 때 쓰는 줄 알았지만
sort, every, some, filter, map 등등 다양한 메소드들을 reduce로 구현 할 수 있음
let arr = [1,2,3];
let result;
result = arr.reduce((acc, cur) => {
acc.push(cur);
return acc;
}, []);
result; // [1,2,3]
초깃값에 빈배열을 지정하고, 배열에 값들을 push하면
map처럼 새로운 배열을 만들 수 있음
위 코드에 조건문을 달면 filter()도 만들 수 있음
let arr = [1,2,3,5,10,6,70];
let result;
result = arr.reduce((acc, cur) => {
if(cur < 10) acc.push(cur);
return acc;
}, []);
result;
비동기 프로그래밍도 가능
const promiseFactory = (time) => {
return new Promise((resolve, reject) => {
console.log(time);
setTimeout(resolve, time);
});
};
[1000, 2000, 3000, 4000].reduce((acc, cur) => {
return acc.then(() => promiseFactory(cur));
}, Promise.resolve());
// 바로 1000
// 1초 후 2000
// 2초 후 3000
// 3초 후 4000