함수에는 매개변수로 객체와 배열 각각 1개씩 받는다.
첫번째 매개변수는 과목이름 (key) : 등급 (value)이 들어있는 객체를 매개변수로 받고 두번째 매개변수는 과목이름만 들어있는 배열을 매개변수로 받게 된다.
1.
에서 만든 새로운 객체안에 key값으로 존재 하지 않을경우 value를 0으로 해서 객체에 추가처음 코드를 구현 했을때
1.
>2.
으로 로직을 구현 했다. 미리 입력된 for문이 끝난 순간 객체가 완성되게 하고 싶어 여러 시도를 한 후, 작동 순서를2.
>1.
로 변경해 결과물을 출력하게 되었다.
const getExamResult = (scores, requiredClasses) => {
const keyArray = Object.keys(scores);
const filterToClass = requiredClasses.filter(el => !(keyArray.includes(el)));
for(let i = 0; i<filterToClass.length; i++){
scores[filterToClass[i]] = 0;
}
const numericScores = {
}; ...
기본으로 getExamResult
함수에 scores
와 requiredClasses
두개의 매개변수를 받는다. scores
는 객체, requiredClasses
는 배열이다.
먼저 객체와 배열에 있는 중복 값을 쉽게 걸러내기 위해 객체에 있는 key값을 배열로 전환시켜주는 Object.keys(scores)
메소드를 사용해 변수 keys에 객체의 key값을 배열로 저장 시켰다.
그 후, filter
,includes
메서드를 조합 해, 두 배열이 중복 되지 않는 값만 filterToClass
변수를 생성해 할당한 뒤, 반복문을 통해 filterToClass
의 값을 value = 0 을 할당해 scores
에 집어 넣었다. 이제 남은 건 기존 객체 값에 value를 등급 > 숫자로 바꾼뒤 새로운 객체에 넣으면 끝난다.
for (let key in scores) {
const value = scores[key];
let scorevalue = 0;
switch(value) {
case "A+":
scorevalue = 4.5;
break;
case "A":
scorevalue = 4;
break;
// --------------//
case "F":
scorevalue = 0;
break;
}
numericScores[key] = scorevalue;
}
return numericScores;
}
for...in
문은 객체를 순회 할 수 있는 방법중 하나이며, for...in
문의 특징은 객체의 값만큼 반복하며, 인덱스로 key에 해당하는 문자열을 할당 받는데 이를 통해 객체의 모든 값에 손쉽게 접근할 수 있다. 이 반복문을 사용해 새로운 객체에 값을 넣어 줄 것이다.
value
변수를 생성해 scores
객체의 value 값을 할당한다. for...in
문 에서 인덱스로 객체의 key 값을 받고 있으니, scores[key]
를 할당하면 객체의 현재 인덱스인 key값의 value를 value
변수에 할당 하게 된다.
value
에 할당된 값은 현재 문자열로 되어있는데, 이를 switch
문을 이용해 숫자로 변환시켜 준다.
마지막으로 반복문 내에서 numericScores[key] = scorevalue
를 할당하면 scores
객체를 순회 하며 numericScores
객체에 key와 숫자로 변환된 value값을 하나씩 차곡차곡 넣어주게 될 것이다.
해당 문제를 푸는데 많은 시간이 들었다.
하지만, 이번 문제를 풀면서 객체와 많이 친해진 느낌이 든다.