728x90
reduce
- 4가지 인자 : reviousValue, currentValue, currentIndex, array
- 더 간단하게 → "누산기(acc), 현재값(cur), 현재 인덱스(idx), 원본 배열(src)" 라고 한다.
- 반환 값은 누산기(acc)에 할당되며, 누산기는 순회 중 유지뵈므로 최정 결과는 하나의 값이 된다.
01. 배열 요소 전체 합
const ar = [1,2,3,4,5];
let reducer = ar.reduce(
(reviousValue, currentValue, currentIndex, array) =>{
console.log("(", reviousValue, ", ", currentValue, ")");
console.log("궁금한 값 : ", reviousValue+currentValue);
return reviousValue+currentValue
}
);
02. 객체 배열 값 합산
const ar = [
{x:1},
{x:2},
{x:3}
]
let reducer = ar.reduce(
(acc, cur, idx, src) => {
console.log(cur.x);
return acc + cur.x
},0,0,0
);
console.log("정답 : ", reducer);
03. 중첩 배열 펼치기
const ar = [[0, 1], [2, 3], [4, 5]];
let reducer = ar.reduce(
(acc, cur, idx, src)=>{
console.log(acc);
return acc.concat(cur)
}, []
)
console.log("result : ", reducer);
04. 객체 내 값 인스턴스 개수 세기
const ar = ['Tiger', 'Lion', 'Turtle', 'Tiger', 'Tiger'];
let reducer = ar.reduce(
(acc, cur, idx, src)=>{
if (cur in acc){
acc[cur]++;
}else{
acc[cur]=1
}
console.log(acc);
return acc
},{}
)
console.log("result", reducer);
05. 배열의 중복 항목 제거
const ar = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let reducer = ar.sort().reduce(
(acc, cur, idx, src)=>{
let length = acc.length;
if (length === 0 || acc[length-1] !== cur){
acc.push(cur);
}
console.log(acc);
return acc;
}, []
)
console.log("result : ",reducer);
06. map으로 사용하기
const ar = [1, 2, 3, 4, 5];
let reducer = ar.reduce(
(acc, cur)=>{
acc.push(cur*2);
console.log(acc);
return acc
},[]
)
console.log("result : ", reducer);
07. filter로 사용하기
const ar = [1, 2, 3, 4, 5];
let reducer = ar.reduce(
(acc, cur)=>{
if(!(cur % 2)) acc.push(cur)
console.log(acc);
return acc
},[]
)
console.log("result : ", reducer);
08. 속성으로 객체 분류하기
const people = [
{name:'A', age : 23},
{name:'B', age : 26},
{name:'C', age : 26},
{name:'D', age : 28}
];
function groupBy(objectArray, property){
return objectArray.reduce(
(acc, cur)=>{
let key = cur[property];
if(!acc[key]){
acc[key]=[];
}
acc[key].push(cur);
console.log(acc);
return acc;
}, {}
);
}
console.log(groupBy(people, 'age'));
09.
728x90
'웹 full stack 교육 > 이론' 카테고리의 다른 글
[docker] network 연결 (0) | 2021.10.06 |
---|---|
[docker] tomcat, mysql 배포 (0) | 2021.10.05 |
[JavaScript] 기초 문법(5) - 배열 (0) | 2021.10.02 |
[docker] docker 설치 및 compose 설치와 실행 (0) | 2021.10.01 |
[JavaScript] 기초 문법(4) - 객체 (0) | 2021.09.29 |