본문 바로가기

JS - 배열 안 객체 활용하기 본문

개발/JavaScript

JS - 배열 안 객체 활용하기

자전하는명왕성 2022. 12. 29. 02:00
반응형

Sprint 13 배열 안 객체를 활용하여, 원하는 값 가공하기

해당 문제는 students 라는 객체를 가지고 시작함

객체 students 는 name, korean, math, english, science 각각의 데이터를 가짐

예시

const students = [
  {
    name: '김세준',
    korean: 88,
    math: 94,
    english: 78,
    science: 79,
  }

 

stage 1

  • 해당 학생이 가지고 있는 과목의 평균을 구하고,
  • name / score 라는 key를 가진 객체를 도출하라.

이를 해결하기 위해, 내가 해야하는 것

  • for문을 활용하여 "과목 수" 구하기
  • 각 학생들의 "성적 총합" 구하기
  • 구한 "총합"을 과목 수로 나누어 return 하기

for문을 활용하여 "과목 수" 구하기

 const subject = [];
    for (let i = 1; i < Object.keys(students[0]).length; i++) {
        subject.push(Object.keys(students[0])[i]);
    }
    
// subject = ['korean', 'math', 'english', 'science']

첫 key 인 name을 빼기 위해 i = 1 로 시작

Object.keys(students[0])[i] 를 통해,

객체 내부에 접근하여 korean~science까지의 값을 가져옴

이때, key값은 고정이기 때문에, student[0]가 아닌 student[1]이여도 상관 없음

 

각 학생들의 "성적 총합" 구하기

let totalArr = [];
    for(let i=0; i<students.length; i++){
        let total = 0
        for(let j=0;j<subject.length; j++){
            total += students[i][subject[j]]
        }
        totalArr.push(total)
    }

이중반복문 활용

배열 totalArr 에는 students[i]가 갖는 모든 값의 총합이 들어가게 됨

 

구한 "총합"을 과목 수로 나누어 return 하기

let averageArr = []
    for(let i=0; i<students.length;i++){
        averageArr.push(totalArr[i] / subject.length)
        scoreAverage[i] = {name : students[i].name, score : averageArr[i]}
    }

return scoreAverage

위와 원리는 같음

scoreAverage[i] = {name : students[i].name, score : averageArr[i]} 를 통해 객체를 배열에 저장하고

scoreAverage 를 리턴함

 

stage 2

  • 가져온 점수를 등급화한 뒤,
  • name / grade 라는 key를 가진 객체를 도출하라.

 

점수 등급화

const score = calculateAverage(students);

let rank = []
    for(let i = 0; i<score.length; i++){
        if(score[i].score >= 91){
            rank.push("A")
        } else if(score[i].score >= 81){
            rank.push("B")
        } else if(score[i].score >= 71){
            rank.push("C")
        } else if(score[i].score >= 61){
            rank.push("D")
        } else {
            rank.push("F")
        }
    }

// 객체 이름이 score로 바뀜

배열 rank에 각 등급을 넣어줌

 

객체 도출

    let result = []
    for(let i=0;i<score.length;i++){
        result[i] = {name : score[i].name, grade : rank[i]}
    }
    console.log(result, "result")
    
    return result

 

반응형

'개발 > JavaScript' 카테고리의 다른 글

JS - todolist / 날씨 적용하기(API)  (0) 2022.12.30
JS - todoList  (0) 2022.12.29
JS - 반복문(for, while) / 객체활용 for문 / for in / for out  (0) 2022.12.28
JS - 함수 / 함수 사용  (1) 2022.12.27
JS - 데이터, 배열, 객체  (2) 2022.12.26
Comments