javascript - object

혜성·2022년 3월 5일
0

자바스크립트 문제를 풀며 가장 해결하는데에 오래걸린 문제 30.object(3)

주어진 객체를 순환하여 key와 value를 통해 원하는대로 새로운 객체를 리턴하는 문제

  • 문제의 요구조건 1 - 주어진 객체의 기본 value에 따라 같은 항목에 대한 새로운 value로 할당

  • 문제의 요구조건 2 - 추가로 주어진 문자열로 이루어진 배열내의 요소중 기존 객체에 할당되지 않은 항목이 있다면 해당 요소를 추가후 초기화

    {
    '생활속의회계': 'C',
    '논리적글쓰기': 'B',
    '독일문화의이해': 'B+',
    '기초수학': 'D+',
    '영어회화': 'C+',
    '인지발달심리학': 'A+',
    }
    문제에서 주어지는 객체


    ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
    #다음과 같은 배열에 기존 객체에 해당하지 않는 키값을 0으로 초기화해 추가하여


    {
    '생활속의회계': 2,
    '논리적글쓰기': 3,
    '독일문화의이해': 3.5,
    '기초수학': 1.5,
    '영어회화': 2.5,
    '인지발달심리학': 4.5,
    '공학수학': 0,
    '컴퓨터과학개론': 0,
    }
    #이러한 객체로 리턴하는 문제

문제풀이 및 어려웠던점

처음 문제를 확인 한 후 각 학점을 숫자로 표현하기 위해 for in 문과 if 문을 통해 직접 비교하며 새로운 객체를 생성해 할당하려 했다.
하지만 이와같은 방법으로는 추가로 주어지는 배열과 객체와의 관계를 고려하는것에 어려움이 있었다. 따라서 새로운 방법을 고려해야하였다.

객체의 특성에 대해 다시한번 공부하고 문제를 바라보았다.

객체는 이미 존재하는 항목을 중복으로 다시 할당할시 기존에 할당한 항목이 아닌 가장 나중에 할당된 값이 저장된다는 것을 찾았다.

1. 객체의 위와같은 특성을 이용해 먼저 성적을 변환때 이용할 객체와 새롭에 정의할 객체를 먼저 생성했다.

let result = {};

const grade = {
    "A+": 4.5,
    "A": 4,
    "B+": 3.5,
    "B": 3,
    "C+": 2.5,
    "C": 2,
    "D+": 1.5,
    "D": 1,
    "F": 0,
  }

2. 두번째로는 forEach문을 통해 주어진 배열을 순회하며 각 요소를 객체의 key로 value를 0으로 하는 항복을 생성해둔 빈 객체에 추가했다.

requiredClasses.forEach(function(key) {
    result[key] = 0;
  });

3. 마지막으로 for in 문을 통해 주어진 객체의 value를 저장할 변수, 주어진 객체의 value를 사용해 기존에 만들어둔 grade 객체의 키값으로 이용하여 각 성적별 점수를 저장할 변수를 생성하고 해당 변수를 result 객체의 value를 할당하는데에 사용했다. 이때 객체의 특성으로인해 주어진 배열에의해 값을 0으로 하는 항목은, 주어진 객체에 같은 key값을 가진 항목이 있더라도 다시한번 할당되어 문제의 조건을 맞출 수 있게 된다.

for(let key in scores){
    let scores_value = scores[key]; //scores_value는 주어진 객체의 value를 저장
    let grade_value = grade[scores_value]; //scores_value를 key로 grade객체의 value를 저장 학점을 점수로 변환
    result[key] = grade_value;//기존객체의 key와 점수로 변환한 grade_value를 사용해 result객체에 항목추가
  }
 });

객체의 특성에 대해 아직 부족한 이해로 문제해결에 어려움이 있었지만 이 문제를 계기로 확실히 이해하고 넘어갈 수 있는 계기가 되었다.

//전체 코드
const getExamResult = (scores, requiredClasses) => {
  let result = {};
  const grade = {
    "A+": 4.5,
    "A": 4,
    "B+": 3.5,
    "B": 3,
    "C+": 2.5,
    "C": 2,
    "D+": 1.5,
    "D": 1,
    "F": 0,
  }
    requiredClasses.forEach(function(key) {
    result[key] = 0;
  });
  for(let key in scores){
    let scores_value = scores[key];
    let grade_value = grade[scores_value];
    result[key] = grade_value;
  }
  

  return result;
  
}

0개의 댓글