wecode 레플릿 과제를 풀며 정리한 내용입니다.
for.. in
문을 활용해 객체 및 배열을 순회하는 방법으로 푸는 문제입니다. getExamResult
함수는 매개변수로 scores
와 requiredClasses
를 받습니다. scores
는 아래와 같이 객체 형태의 과목과 점수를 갖습니다.
{
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
requiredClasses
인자는 문자열로 된 과목을 갖습니다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
socres
객체가 가지고 있는 key
값들을 새로운 객체에 포함하 돼 그 value
값들은 아래처럼 숫자로 바꾸어 할당해야 합니다.A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
requiredClasses
배열의 요소로 존재하지만, scores
의 키로 존재하지 않는 항목이 있다면 새로운 객체의 key
로 추가하고 value
에 0
을 가집니다. 1번 문제를 해결하기 위해 변경되어야 할 점수값을 객체로 맵핑하고, 새로운 정답을 담을 빈 객체를 만들어 주고, for in
반복문으로 객체를 돌며 점수를 숫자로 바꾸어줍니다.
const getExamResult = (scores, requiredClasses) => {
const changeScores = {
"A+" : 4.5,
"A" : 4,
"B+" : 3.5,
"B" : 3,
"C+" : 2.5,
"C" : 2,
"D+" : 1.5,
"F" : 0,
};
const answer = {};
for (let key in scores) {
answer[key] = changeScores[scores[key]];
}
}
두번재 문제는 두가지 인자를 비교하기 위해 첫번째 인자인 scores
의 과목 이름을 배열로 만들고, 배열을 돌며 해당 이름이 두번째 인자 배열에 없을 경우 (indexOf
로 확인, 순서 필요 없음) value
를 0으로 해서 정답 객체에 넣어 줍니다.
const getExamResult = (scores, requiredClasses) => {
const changeScores = {
"A+" : 4.5,
"A" : 4,
"B+" : 3.5,
"B" : 3,
"C+" : 2.5,
"C" : 2,
"D+" : 1.5,
"F" : 0,
};
const answer = {};
for (let key in scores) {
answer[key] = changeScores[scores[key]];
}
// 두번재 문제 해결
const titles = Object.keys(scores);
for (let i in requiredClasses) {
if (titles.indexOf(requiredClasses[i]) === -1) {
answer[requiredClasses[i]] = 0;
}
return answer;
}
아래처럼 데이터를 넣어서 확인 가능합니다.
const total = {
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
const subject = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
console.log(getExamResult(total, subject));