제목이 엄청 길다. 제목을 뭐라고 지어야 할지 아직 잘 모르겠다. 태어나서 처음하는 블로그다보니...
어쨌든 저 긴 제목을 풀어쓰자면,
여러 객체들을 가진 배열을 입력받아 내가 원하는 특정한 값들만 골라서 합산해야 할 필요가 있는 경우이다.
예를 들자면 이런거다. 이렇게 모 학원의 수강생들이 기록된 데이터가 있다고 치자.
전체적으로 배열이고 그 안에 각 학생의 '이름 / 소속반 / 출석일수'가 객체 형태로 들어있다.
그런데 반을 두개, 세개씩 신청해서 다니는 학생들이 있다. 그 학생들의 총 출석일수를 알고 싶은 것이다.
위의 두 코드는 동일하지만 작동방식이 살짝 다르다.
위 두 코드중 아무거나 실행하면 이렇게 각 학생의 총 출석일수를 반환한다.
과목을 월로 바꿔서 1년동안의 출석일수를 알아본다거나, 출석일수를 수강료로 바꿔서 총 수강료 금액을 합산한다던지, 학생별 성적의 평균을 낸다던지 등등 다양하게 응용할 수 있을 것 같다.
<복붙용 코드>
// data
let students = [
{ name: '김엘라', class: '농구', days: 8 },
{ name: '김현지', class: '축구', days: 9 },
{ name: '이아인', class: '뮤지컬', days: 11 },
{ name: '이혜성', class: '농구', days: 7 },
{ name: '김엘라', class: '논술', days: 4 },
{ name: '송지우', class: '논술', days: 10 },
{ name: '박은지', class: '발레', days: 11 },
{ name: '김엘라', class: '발레', days: 7 },
{ name: '김현지', class: '뮤지컬', days: 3 },
{ name: '이혜성', class: '축구', days: 9 },
{ name: '이지현', class: '논술', days: 10 },
{ name: '이혜성', class: '뮤지컬', days: 10 },
{ name: '송지우', class: '컴퓨터', days: 8 },
{ name: '김엘라', class: '피아노', days: 8 },
{ name: '이아인', class: '컴퓨터', days: 10 },
{ name: '박은지', class: '컴퓨터', days: 9 },
{ name: '송지우', class: '발레', days: 9 },
{ name: '이혜성', class: '컴퓨터', days: 11 },
{ name: '이지현', class: '피아노', days: 10 },
{ name: '김현지', class: '발레', days: 8 },
{ name: '주헤라', class: '논술', days: 7 },
{ name: '송지우', class: '축구', days: 10 },
{ name: '박은지', class: '피아노', days: 9 },
{ name: '김현지', class: '컴퓨터', days: 10 },
{ name: '주헤라', class: '발레', days: 9 },
]
// 코드 1
// 학생에 대한 정보가 담긴 객체들로 이루어진 배열 students와 학생이름 person을 입력받는다
// 각 객체의 'name' 속성값이 person과 일치할 때 학생의 출석일수 days를 합산하여 리턴한다.
function managementClass2(students, person) {
const sum = students.reduce(function (acc, cur) {
if (cur.name === person) {
return acc + cur.days;
} else {
return acc;
}
}, 0); // reduce 일반 함수에서 initialValue 넣기
return sum;
}
// 코드 2. 위 코드와 같은 결과를 출력한다.
// 한줄로 줄여보았다.
function managementClass(students, person) {
return students.filter(el => el.name === person).map(el => el.days).reduce((acc, cur) => acc + cur, 0)
// reduce 화살표 함수에서 initialValue 넣기
}
'Java Script' 카테고리의 다른 글
MySql 서버를 재시작 하고 싶은데 안될 때... (0) | 2022.04.09 |
---|---|
배열의 0번째 요소부터 마지막 요소까지 모두 더하기 (for문, reduce, 재귀함수) (0) | 2021.10.08 |
[JS, Java Script] var 와 let 의 차이 (0) | 2021.09.23 |
[DOM] html 내에서 JavaScript 파일 호출하기 (0) | 2021.09.12 |
[JS, Java Script] 변수 scope (0) | 2021.08.14 |