JS repl.it 30. object (3) - 2

김형석·2022년 4월 28일
0

WECODE

목록 보기
7/33

방금 풀었던 Assignment... 어렵기도 했고, 뒤돌면 잊어버리기 때문에 바로 기록하도록 해보자

Assignment

아래 설명을 읽고 getExamResult 함수를 구현하세요.

인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}

인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.

['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요.

  1. scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
    A+ => 4.5
    A => 4
    B+ => 3.5
    B => 3
    C+ => 2.5
    C => 2
    D+ => 1.5
    D => 1
    F => 0

  2. requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.

{
  '생활속의회계': 2,
  '논리적글쓰기': 3,
  '독일문화의이해': 3.5,
  '기초수학': 1.5,
  '영어회화': 2.5,
  '인지발달심리학': 4.5,
  '공학수학': 0,
  '컴퓨터과학개론': 0,
}

뭐를 어떻게 하라고요? 문제부터 길어 읽기도 전에 무섭다. 뭐 어쨋든 마지막 object처럼 만들라는 것이다.

일단 최종 코드를 보며 리뷰를 해보자

let scr = {
            '생활속의회계': 'C',
            '논리적글쓰기': 'B',
            '독일문화의이해': 'B+',
            '기초수학': 'D+',
            '영어회화': 'C+',
            '인지발달심리학': 'A+'
          };

let rec = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론'];


const getExamResult = (scores, requiredClasses) => {
let scoreNum = {
          'A+' : 4.5,
          'A' : 4,
          'B+' : 3.5,
          'B' : 3,
          'C+' : 2.5,
          'C' : 2,
          'D+' : 1.5,
          'D' : 1,
          'F' : 0
          }; 
  let newObj = {}
  for( let key in requiredClasses){
    const classes = requiredClasses[key]
    newObj[classes] = 0
  }
  // console.log(newObj)

  for( let key in scores){
    const scrValue = scores[key]
    const scrValue2 = scoreNum[scrValue]  
    newObj[key] = scrValue2;
  }
  // console.log(newObj)
  return newObj
}

getExamResult(scr,rec)

일단 getExamResult 함수에서 사용 할 학점을 scoreNum 변수에 저장을 해주고 새로운 객체인 newObj를 만들어줬다.

 for( let key in requiredClasses){
    const classes = requiredClasses[key]
    newObj[classes] = 0
  }

requiredClasses 를 반복문으로 돌려 newObj 에 키로 넣어주고 값은 scores의 키로 존재하지 않는 항목은 값을 0으로 주기 위해 모든 값에 미리 0을 넣어줬다.

  for( let key in scores){
    const scrValue = scores[key]
    const scrValue2 = scoreNum[scrValue]  
    newObj[key] = scrValue2;
  }

scores 의 값(알파벳학점?)을 scrValue 에 저장해 주고, 다시 그 값을 scoreNum 의 키로 넣어주어 scrValue2 에 저장을 해준다면 어떻게 될까?
바로 scrValue2 에 scores 의 알파벳학점이 숫자학점으로 바뀌는 것이다. 쓰면서도 헷갈리다. 맞게 적은거겠지?

자 그렇게 나온 scrValue2 를 newObj 의 값으로 넣어주기만 하면 모든 키의 값이 0 이었던 newObj 에 숫자학점이 들어가게 된다. 물론 점수가 없는 키들은 값을 0으로 갖는다.

return newObj

자 마지막으로 reutrn 해주고 끝을 내주자

계속 시간투자를 하지는 않았지만 결국 어제 저녁부터 풀기 시작해서 오늘 점심먹고 풀었다. 아직 뒤에 Assignment가 많이 남았지만 빨리 복기하고 싶어 풀자마자 블로깅을 했다. 물론 혼자 풀지 못하고 구글의 힘을 빌렸다. 내일은 혼자 풀어 볼거다. 눈감고 풀 수 있을 때까지 풀거다. 기다려라...

profile
블로그 이사 : https://hengxi.tistory.com

0개의 댓글