📖형식
arr.reduce((prev , curr , currIdx , array)=>{
return prev + curr
},initalValue)
1. 객체 배열에서의 값 합산
let init = 0
let sum = [{x:1},{x:2},{x:3}].reduce((acc , cur)=>{
return acc + cur.x
},init)
console.log('---------------------');
console.log(sum)
2-1. 중첩 배열 펼치기
let flat = [[0,1],[2,3],[4,5]].reduce((acc ,cur)=>{
return [...acc ,...cur]
},[])
console.log('---------------------');
console.log(flat);
2-2. spread operator와 초기값을 이용하여 객체로 이루어진 배열에 담긴 배열 연결하기
let friends = [{
name: 'Anna',
books: ['Bible', 'Harry Potter'],
}, {
name: 'Bob',
books: ['War and peace', 'Romeo and Juliet'],
}, {
name: 'Alice',
books: ['The Lord of the Rings', 'The Shining'],
}];
let result = friends.reduce((acc,cur)=> {
return [...acc , ...cur.books]
},['Alphabet'])
console.log('---------------------');
console.log(result);
3. 객체 내의 값 인스턴스 개수 세기
let name = ['Allice','Bob','Tiff','Bruce','Bob']
let result = name.reduce((allName , Name) => {
if (Name in allName) {
allName[Name] ++
}
else {
allName[Name] = 1;
}
return allName
},{})
console.log('---------------------');
console.log(result);
4. 속성으로 객체 분류하기
let people = [
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
];
const groupBy = (objArr , props) => {
return objArr.reduce((acc , obj) => {
let key = obj[props]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(acc)
return acc
},{})
}
console.log('---------------------');
console.log(groupBy(people , 'age'));
5. 배열의 중복 항목 제거
let arr = [1, 5, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce((acc,cur) => {
const length = acc.length
if (length === 0 || acc[length - 1] !== cur) {
acc.push(cur)
}
return acc
}, [])
console.log('---------------------');
console.log(result);
6. 파이프 함수(함수 합성)
const double = x => x + x;
const tripple = x => 3 * x;
const quadruple = x => 4 * x;
const pipe = (...fnc) => (input) => fnc.reduce((acc, f)=>f(acc),input)
console.log('---------------------');
pipe(double,tripple,quadruple)(10)
7. 프로미스 순차적으로 실행
function runPromiseInSequence(arr, input) {
return arr.reduce(
(promiseChain, currentFunction) => promiseChain.then(currentFunction),
Promise.resolve(input)
);
}
function p1(a) {
return new Promise((resolve, _) => {
resolve(a * 5);
});
}
function p2(a) {
return new Promise((resolve, _) => {
resolve(a * 2);
});
}
function f3(a) {
return a * 3;
}
function p4(a) {
return new Promise((resolve, _) => {
resolve(a * 4);
});
}
const promiseArr = [p1, p2, f3, p4];
runPromiseInSequence(promiseArr, 10)
.then(console.log);
Reference
MDN