TIL no.29 - JS Object Repl.it

김종진·2021년 1월 18일
0


Wecode 자바스크립트 Replit 문제에서 가장 고민하고 객체에 대해 더 많이 배울 수 있던 문제!

과목별 학점(알파벳)데이터가 들어있는 객체를 학점값을 숫자로 치환한 새로운 객체를 반환하는 함수를 구현하는 문제
ex) '인지발달심리학': 'A+' => '인지발달심리학': 4.5

getExamResult 함수를 구현해주세요.

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

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

인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요
scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다.
단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
requiredClass 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이있다면,
해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다.
위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면,
다음과 같은 객체과 리턴됩니다. (요소간 순서는 다를수 있지만, 채점에 무관합니다.)

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

Point
Object[key] = Object의 value

My Code

const getExamResult = (scores, requiredClasses) => {
  const result = {}

  let grade = {
    'A+': 4.5,
    'A': 4,
    'B+': 3.5,
    'B': 3,
    'C+': 2.5,
    'C': 2,
    'D+': 1.5,
    'D': 1,
    'F': 0
  };

  for (let i = 0; i < requiredClasses.length; i++) {
    let key = requiredClasses[i];
    result[key] = 0;
  }

  for (let key in scores){
    let value = scores[key];
    result[key] = grade[value];  
  }

  return result;
}
  1. 우선 Key requiredClasses 배열의 값들을 객체에 추가해준다.
    scores의 key의 존재하지 않아도 객체의 key값으로 추가하기 위해 먼저 추가해준다.
  for (let key in scores){
    let value = scores[key];
    result[key] = grade[value];  
  }

scores[key] => 과목의 평가 'A+ , B+' 등을 value 값으로 담아준다.
result[key] => 과목명
grade[value] => '4.5 , 4' 등의 값

반복문이 돌면서 과목명 key에 value 값을 하나씩 할당해준다.

객체의 값을 할당해주는 방식에 대해서 확실히 알게 되었다

profile
FE Developer

0개의 댓글