TIL _ 객체와 객체의 mapping

옥원철·2021년 10월 13일
0

Javascript

목록 보기
8/17
post-thumbnail
post-custom-banner

❓문제

  • 다음과 같은 객체가 주어졌을 때,
 const scores = {
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}
  • 알파벳으로 표기된 각 학점을 숫자로 치환하기
    (A+ : 4.5, A : 4.0 ... D : 1.0, F : 0)


1. 최초 풀이


  • 사고 과정
    1. (문제 파악) scores 객체의 각 키 값을 변경해야 함
    2. (해결 방안) 객체 내 키 값을 순회하기 위하여 for...in 구문을 활용
    3. (문제 파악) 현재 알파벳인 키 값을 정해진 숫자로 치환해야 함
    4. (해결 방안)switch 조건문을 활용하여 scores[i]의 키 값(알파벳 등급)이 각각의 점수에 대응하게 함
function numberedScores = scores => {
  for (let i in scores) {
    switch (scores[i]) {
      case 'A+':
        scores[i] = 4.5;
        break;
      case 'A':
        scores[i] = 4.0;
        break;
      case 'B+':
        scores[i] = 3.5;
        break;
      case 'B':
        scores[i] = 3.0;
        break;
      case 'C+':
        scores[i] = 2.5;
        break;
      case 'C':
        scores[i] = 2.0;
        break;
      case 'D+':
        scores[i] = 1.5;
        break;
      case 'D':
        scores[i] = 1.0;
        break;
      case 'F':
        scores[i] = 0;
        break;
    }
  }
  return scores;
}
  • review
    1. 변경할 키 값이 많아질수록 함수가 길어짐(case, break의 반복 사용으로 인해 줄이 길어짐)
    2. 변경할 키 값(알파벳)과 변경될 키 값(숫자)의 매칭을 한 눈에 확인하기 어려움



2. 개선 답안


  • 개선 사항
    1. 변경할 키 값(알파벳)과 변경될 키 값(숫자)를 하나의 객체로 선언하여 직관성을 높임
    2. 변경할 키 값(scores[key])과 변경될 키 값을(grades[scores[key]])를 for...in문을 통해 맵핑시켜 함수를 간결하게 정리
    ( ex. A = B, B = C → A = C)
const getExamResult = (scores, requiredClasses) => {
  const grades = {
    'A+' : 4.5,
    'A' : 4.0,
    'B+' : 3.5,
    'B' : 3.0,
    'C+' : 2.5,
    'C' : 2.0,
    'D+' : 1.5,
    'D' : 1.0,
    'F' : 0
  }

  for (let key in scores) {
    scores[key] = grades[scores[key]]
  }
}



"작성 내용 중 오류나 오타가 있다면, 댓글로 알려주시면 감사하겠습니다. 주니어 개발자에게 남겨주시는 작은 피드백이 큰 도움이 될 것 같습니다. 고맙습니다 :)"

profile
Obtainment Of The Day
post-custom-banner

0개의 댓글