JS - 문제 : 객체와 배열을 조건에 맞게 합하여 새로운 객체로 리턴

JUGNMIN LEE·2021년 1월 14일
0

피곤함의원인

목록 보기
1/2
post-thumbnail

Repl.it 문제를 풀다가 굉장히 고난했던 문제를 만나 메모를 남겨본다.

문제
scores, requiredClass라는 인자값 두개를 받는 getExamResult라는 함수를 만들어라


scores는 객체이며 객체 요소의 갯수 및 키의 이름들은 달라질 수 있으며 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있다.
('A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F')

scores 객체

let scores = {
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+'
}

requiredClasses는 다음과 같이 문자열로 된 배열이다

let requiredClasses = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론'];

다음 조건을 만족하는 객체를 리턴하도록 함수를 구현하라

  1. scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 한다.
    단 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 한다.

A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0

  1. requiredClass 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는
    항목이 있다면 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 한다.

위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면,
다음과 같이 객체가 리턴되야한다 ~

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

풀이

const getExamResult = (scores, requiredClasses) => {
  let requiredClassesObj = {};
    for(let key in scores){
    const value = scores[key];      
    if(value === 'A+'){
      scores[key] = 4.5
    }else if(value === 'A'){
      scores[key] = 4.0
    }else if(value === 'B+'){
      scores[key] = 3.5
    }else if(value === 'B'){
      scores[key] = 3.0
    }else if(value === 'C+'){
      scores[key] = 2.5
    }else if(value === 'C'){
      scores[key] = 2.0
    }else if(value === 'D+'){
      scores[key] = 1.5
    }else if(value === 'D'){
      scores[key] = 1.0
    }else if(value === 'F'){
      scores[key] = 0
    }
  }
  for(let key in requiredClasses){
    //배열 길이만큼 돌려서 빈객체인 obj에게 넣는중
    let helpme = requiredClasses[key];
    requiredClassesObj[helpme] = 0;
  }
  let result = Object.assign(requiredClassesObj, scores);
  return result;
}

힘들었던 점


1. 배열 자체를 객체로 할당 할 수 있다는게 이해가 안갔다 왜냐하면 배열이 키값으로 들어오면 과연 value값은 어떻게 설정을 할 것인가가 의문이었다. 그래서 코드에서도

requiredClassesObj[helpme] = 0; 을 맨처음에
requiredClassesObj[helpme]; 이렇게 하고 엄청 헤맸던거 같다


2. return의 위치에서 당황했던거 같다 장시간 들여다봐서 그런가 중간중간 값을 확인해보려고
return을 수도 없이 때렸지만 원하는 값이 안나오고 있는 것 같아 보아하니 for in문 속에서
return을 돌렸다


3. scores를 키값과 배열값을 나누려고 했다 애초에 for in문 사용해서 안에 있는 값들을 재 할당만 해주면 되는 거였는데 ㅠ

느낀점

profile
Frontend Developer

0개의 댓글