❓문제
const scores = {
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
- 알파벳으로 표기된 각 학점을 숫자로 치환하기
(A+ : 4.5, A : 4.0 ... D : 1.0, F : 0)
1. 최초 풀이
- 사고 과정
1. (문제 파악) scores
객체의 각 키 값을 변경해야 함
2. (해결 방안) 객체 내 키 값을 순회하기 위하여 for...in
구문을 활용
3. (문제 파악) 현재 알파벳인 키 값을 정해진 숫자로 치환해야 함
4. (해결 방안)switch
조건문을 활용하여 scores[i]
의 키 값(알파벳 등급)이 각각의 점수에 대응하게 함
function numberedScores = scores => {
for (let i in scores) {
switch (scores[i]) {
case 'A+':
scores[i] = 4.5;
break;
case 'A':
scores[i] = 4.0;
break;
case 'B+':
scores[i] = 3.5;
break;
case 'B':
scores[i] = 3.0;
break;
case 'C+':
scores[i] = 2.5;
break;
case 'C':
scores[i] = 2.0;
break;
case 'D+':
scores[i] = 1.5;
break;
case 'D':
scores[i] = 1.0;
break;
case 'F':
scores[i] = 0;
break;
}
}
return scores;
}
- review
1. 변경할 키 값이 많아질수록 함수가 길어짐(case, break의 반복 사용으로 인해 줄이 길어짐)
2. 변경할 키 값(알파벳)과 변경될 키 값(숫자)의 매칭을 한 눈에 확인하기 어려움
2. 개선 답안
- 개선 사항
1. 변경할 키 값(알파벳)과 변경될 키 값(숫자)를 하나의 객체로 선언하여 직관성을 높임
2. 변경할 키 값(scores[key]
)과 변경될 키 값을(grades[scores[key]]
)를 for...in
문을 통해 맵핑시켜 함수를 간결하게 정리
( ex. A = B, B = C → A = C)
const getExamResult = (scores, requiredClasses) => {
const grades = {
'A+' : 4.5,
'A' : 4.0,
'B+' : 3.5,
'B' : 3.0,
'C+' : 2.5,
'C' : 2.0,
'D+' : 1.5,
'D' : 1.0,
'F' : 0
}
for (let key in scores) {
scores[key] = grades[scores[key]]
}
}
"작성 내용 중 오류나 오타가 있다면, 댓글로 알려주시면 감사하겠습니다. 주니어 개발자에게 남겨주시는 작은 피드백이 큰 도움이 될 것 같습니다. 고맙습니다 :)"