제목이 엄청 길다. 제목을 뭐라고 지어야 할지 아직 잘 모르겠다. 태어나서 처음하는 블로그다보니...

어쨌든 저 긴 제목을 풀어쓰자면,

여러 객체들을 가진 배열을 입력받아 내가 원하는 특정한 값들만 골라서 합산해야 할 필요가 있는 경우이다.

 

모 학원 수강생들 데이터

예를 들자면 이런거다. 이렇게 모 학원의 수강생들이 기록된 데이터가 있다고 치자.

전체적으로 배열이고 그 안에 각 학생의 '이름 / 소속반 / 출석일수'가 객체 형태로 들어있다.

그런데 반을 두개, 세개씩 신청해서 다니는 학생들이 있다. 그 학생들의 총 출석일수를 알고 싶은 것이다.

#1. 모범답안에 가까운 코드

 

#2. 이번에는 엄청나게 압축해서 써보았다.  위 코드와 동일한 결과를 가져오지만 작동방식은 살짝 다르다. 가독성 면에서는 좋다고 할 수 없을 것 같다.

 

위의 두 코드는 동일하지만 작동방식이 살짝 다르다.

 

 

코드 실행 결과

위 두 코드중 아무거나 실행하면 이렇게 각 학생의 총 출석일수를 반환한다.

과목을 월로 바꿔서 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 넣기
}

 

 

눈이 아파서 넣어요 눈이 아파서 ㅠㅠ

+ Recent posts