Repl.it 문제를 풀다가 굉장히 고난했던 문제를 만나 메모를 남겨본다.
문제
scores, requiredClass라는 인자값 두개를 받는 getExamResult라는 함수를 만들어라
scores는 객체이며 객체 요소의 갯수 및 키의 이름들은 달라질 수 있으며 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있다.
('A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F')
scores 객체
let scores = {
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+'
}
requiredClasses는 다음과 같이 문자열로 된 배열이다
let requiredClasses = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론'];
다음 조건을 만족하는 객체를 리턴하도록 함수를 구현하라
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면,
다음과 같이 객체가 리턴되야한다 ~
{
'영어회화': 2.5,
'기초수학': 1.5,
'공학수학': 0,
'컴퓨터과학개론': 0,
'생활속의회계': 2,
'논리적글쓰기': 3,
'독일문화의이해': 3.5,
'인지발달심리학': 4.5
}
풀이
const getExamResult = (scores, requiredClasses) => {
let requiredClassesObj = {};
for(let key in scores){
const value = scores[key];
if(value === 'A+'){
scores[key] = 4.5
}else if(value === 'A'){
scores[key] = 4.0
}else if(value === 'B+'){
scores[key] = 3.5
}else if(value === 'B'){
scores[key] = 3.0
}else if(value === 'C+'){
scores[key] = 2.5
}else if(value === 'C'){
scores[key] = 2.0
}else if(value === 'D+'){
scores[key] = 1.5
}else if(value === 'D'){
scores[key] = 1.0
}else if(value === 'F'){
scores[key] = 0
}
}
for(let key in requiredClasses){
//배열 길이만큼 돌려서 빈객체인 obj에게 넣는중
let helpme = requiredClasses[key];
requiredClassesObj[helpme] = 0;
}
let result = Object.assign(requiredClassesObj, scores);
return result;
}
requiredClassesObj[helpme] = 0; 을 맨처음에
requiredClassesObj[helpme]; 이렇게 하고 엄청 헤맸던거 같다
2. return의 위치에서 당황했던거 같다 장시간 들여다봐서 그런가 중간중간 값을 확인해보려고
return을 수도 없이 때렸지만 원하는 값이 안나오고 있는 것 같아 보아하니 for in문 속에서
return을 돌렸다
3. scores를 키값과 배열값을 나누려고 했다 애초에 for in문 사용해서 안에 있는 값들을 재 할당만 해주면 되는 거였는데 ㅠ