[TEST 내용]
조건
- getExamResult 함수는 scores(객체), requiredClasses(배열) 두 가지 인자를 받는다.
- scores는 다음과 같은 객체
객체의 property는 과목명,
객체의 값은 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F' 중에 하나를 갖는다
<scores 예시>{ '생활속의회계': 'C', '논리적글쓰기': 'B', '독일문화의이해': 'B+', '기초수학': 'D+', '영어회화': 'C+', '인지발달심리학': 'A+', }
- requiredClasses는 아래와 같이 과목명으로 이루어진 배열이다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
문제
- scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 한다.
- scores 키들의 값은 아래 원리에 따라 숫자로 바뀌어서 할당 되어야 한다.
- requiredClasses 요소로는 존재하지만, scores의 키 값으로 존재하지 않는 과목명이 있다면, 새로운 객체의 키로 추가하고, 값은 0으로 지정.
Expected
{ '생활속의회계': 2, '논리적글쓰기': 3, '독일문화의이해': 3.5, '기초수학': 1.5, '영어회화': 2.5, '인지발달심리학': 4.5, '공학수학': 0, '컴퓨터과학개론': 0, }
[To do]
- 새로운 빈 객체(answer) 만들기
- answer에 기존 키를 넣어주되, 그 값은 기존 알파벳 스코어에 맞는 숫자 스코어로 바꿔서 넣어주기 ➡️
for...in
사용- requiredClasses에 있으나, 기존 객체 키에 없는 과목명을 추가해주기 (해당 값은 0) ➡️
indexOf
사용
[문제 풀이 방식]
1) 점수를 숫자로 바꿀 수 있는 index 만들어 두기, answer 빈 객체 만들기
const getExamResult = (scores, requiredClasses) => { // 알파벳 스코어 배열 인덱스, 숫자 스코어 배열 인덱스 let alphabetScore = ["A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"]; let numScore = [4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0]; let answer = {};
- 각 index 번호가 같기 때문에, 추후에 indexOf로 대치되는 숫자 점수 찾기 가능
2) for in을 사용하여, scores 객체에서 알파벳 점수를 숫자 점수로 바꾸기
for (let property in scores) { const value = scores[property]; // value는 각 과목의 알파벳 점수
const numericScores = numScore[alphabetScore.indexOf(value)]; // alphabetScore 배열에서 value값의 index를 찾아서 numScore의 인덱스 값으로 지정한 것을 새로운 변수로 저장
answer[property] = numericScores; } // answer의 property를 가져오고, 그 값은 위에서 변경된 숫자 값 할당
3) requiredClasses에는 있으나, 기존 객체에 없는 과목을 answer에 추가
const titles = Object.keys(scores); // 기존 객체의 과목명을 가져와서 배열로 만들기 for (i = 0; i < requiredClasses.length; i++){ if (titles.indexOf(requiredClasses[i]) == -1) { answer[requiredClasses[i]] = 0; } } return answer; }; // array.indexOf(value) 에서 value가 array에 없으면 -1을 반환 하는 것을 활용 // indexOf == -1이면 answer 객체에다가 requiredClasses의 해당 인덱스를 property로 넣고, 그 값은 0으로 할당
const getExamResult = (scores, requiredClasses) => {
// 알파벳 스코어 배열 인덱스, 숫자 스코어 배열 인덱스
let alphabetScore = ["A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"];
let numScore = [4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0];
// 빈 객체 하나 만들어 놓고
let answer = {};
// 프로퍼티 의 알파벳 점수를 숫자점수로 바꾸기
for (let property in scores) {
const value = scores[property];
const numericScores = numScore[alphabetScore.indexOf(value)];
answer[property] = numericScores;
}
const titles = Object.keys(scores);
for (i = 0; i < requiredClasses.length; i++) {
if (titles.indexOf(requiredClasses[i]) == -1) {
answer[requiredClasses[i]] = 0;
}
}
return answer;
};
1) 객체에 접근하는 방법
- property가 변수일때는 [ ] 대괄호 사용해서 접근한다.
- 객체의 property에 값을 할당할 때에는
object[property] = 할당하고싶은 값 ;
2)
for - in
사용법
- 기존 for 문을 사용해도 되지만, 간단하게 표현하기 위해 for in 사용
for (let property in object) {실행 내용}
object 개념이 너무 어려워요,,