Javascript- Object & for-in

Hyeonseok Jeong·2022년 10월 1일
1

Javascript

목록 보기
1/1

레플릿을 통해서 문제를 풀고 해당 문제에 대해 복습을 하기위해 작성한 글입니다.

  • 문제
    아래 설명을 읽고 getExamResult 함수를 구현하세요.
    인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.
{
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}
  • 인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
  • scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0

requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.

위의 문제를 풀때 1번 문제에 처음 접근한 방식은 if 문과 switch 문을 통해서 접근하였다.

하지만 후에 2번 문제로 넘어갔을때 for-in문을 3중으로 작성하게 되었는데 무한for문안에 갇혀서 나오지 못하여 새로운 방법으로 접근하였다

바로 A+=> 4.5 의 예시를 object로 선언하는 방식으로 한것이다.

const getExamResult = (scores, requiredClasses) => {
	const numericScores = {};
      const newObject = {
        'A+': 4.5,
        'A': 4,
        'B+': 3.5,
        'B': 3,
        'C+': 2.5,
        'C': 2,
        'D+': 1.5,
        'D': 1,
        'F': 0
      }

위와 같이 먼저 예시를 하나의 객체로 선언해주고 for-in문을 이용하여 scores의 key를 바깥으로 가져와 value라는 변수에 scores[key] 즉, scores의 value값을 담아 주었고 새롭게 만든 newObject 객체 또한 해당 객체의 key를 가져와 응용하여 1번 문제를 풀어 나갔다.

  for(let key in scores){
  	const value = scores[key];
    for(let keys in newObject){
    	if(value === keys){
        const newValue = newObject[keys];
      numericScores[key] = newValue;
      }
    }
  }

이후 2번문제는 if문과 switch를 썻을때는 해당 for-in문 안에 또다른 for-in문과 if 문을 작성하였고 이후 for문의 무간지옥에 빠졌다.

그래서 아에 2번을 처음부터 선언하여 scores에 없는 key와 존재하는 key에 대해서 처음부터 0의 값을 주었다.

for(let i in requiredClasses){
      const addArray = requiredClasses[i];
        numericScores[addArray] = 0;
      }

이런식으로 처음부터 최종적으로 나올 객체에 (현 빈객체) 없었던 key는 value가 0이 들어가게 되고 scores에 존재하는 key들은 for-in문에 들어가 numericScores[key] = newValue; 로 선언 되면서 최종적으로 빈 객체였던 numericScores에 문제가 원하는 property들이 들어 가게 된다.

  • 최종 로직
const getExamResult = (scores, requiredClasses) => {
	const numericScores = {};
      const newObject = {
        'A+': 4.5,
        'A': 4,
        'B+': 3.5,
        'B': 3,
        'C+': 2.5,
        'C': 2,
        'D+': 1.5,
        'D': 1,
        'F': 0
      }
        for(let i in requiredClasses){
      const addArray = requiredClasses[i];
        numericScores[addArray] = 0;
      }
  for(let key in scores){
  	const value = scores[key];
    for(let keys in newObject){
    	if(value === keys){
        const newValue = newObject[keys];
      numericScores[key] = newValue;
      }
    }
  }
  return numericScores;
}
profile
풀스텍 개발자

1개의 댓글

comment-user-thumbnail
2022년 10월 1일

정말 도움이 되네요오

답글 달기