Assignment

아래 설명을 읽고 getExamResult 함수를 구현하세요.

인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

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

인자 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
  2. requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.
  3. {
    '생활속의회계': 2,
    '논리적글쓰기': 3,
    '독일문화의이해': 3.5,
    '기초수학': 1.5,
    '영어회화': 2.5,
    '인지발달심리학': 4.5,
    '공학수학': 0,
    '컴퓨터과학개론': 0,
    }

 

너무 어려웠다..

혼자힘으로 절대 풀 수 없어서

모범답안을 보고 이해해보려고 노력했다.

 

****우선 중요한건

이런식으로 요소를 넣을 수 있다는걸 알아야한다.

 result[key] = list[scores[key]]
리스트[스코어[생활속의 회계]] => 리스트[c] => 2

생활속의 회계 : 2

const seo0 = {}
seo0['apple'] = 'red'
console.log(seo0)

 

[작성코드]

const scores = {
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}
const list = {
  "A+":4.5,
  "A":4,
  "B+":3.5,
  "B":3,
  "C+":2.5,
  "C":2,
  "D+":1.5,
  "D":1,
  "F":0    
}
const requiredClasses =  [
  '영어회화', 
  '기초수학', 
  '공학수학', 
  '컴퓨터과학개론'
]
const getExamResult = (scores, requiredClasses) => {
  const result = {}
  
  for(let key in scores){ //스코어 안에 키를 꺼내라
    result[key] = list[scores[key]]; 
    //1회차//
    //리스트[스코어[생활속의 회계]] => 리스트[c] => 2
    //scores[key] = scores[생활속의회계] = 'c'
    //list[c] = 2
    //key = '생활속의회계'
    //result[생활속의회계] = 2
    //result = {'생활속의회계':2}

    //2회차//
    //key ='논리적인글쓰기'
    //scores[key] = scores[논리적인글쓰기] = 'B'
    //list[b] = 3
    //result[논리적인글쓰기] = 3
    //result ={'생활속의회계':2,'논리적인글쓰기':3}

    // 반복문을 다 돌았을 때 Result의 배열 = {}
    // '생활속의회계': '2',
    // '논리적글쓰기': '3',
    // '독일문화의이해': '3.5',
    // '기초수학': '4.5',
    // '영어회화': '3.5',
    // '인지발달심리학': '4.5'
  }
  const keys = Object.keys(result) 
  //["a", "b", "c"]
  for(let i in requiredClasses){
    // 반복문안에있는 첫번째 i를 꺼내라
    // ? 첫번째 i 뭐야? => 0 1 2 3
    if(!keys.includes(requiredClasses[i])){
      // keys 안에 영어회화가 포함되어있다.인데 !부정문이라 포함되어있지않으면
      // 포함되어있으니 패스
      // requiredClasses[0] = '영어회화'
      result[requiredClasses[i]] = 0;
      // result에 얘 추가해 => requiredClasses[2] = 공학수학
      // '공학수학':'0'
      // result에 얘 추가해 => requireClasses[3] = 컴퓨터과학개론
    }
  }
  return result;
}
console.log(getExamResult(scores,requiredClasses))

 

for...in() 

 

for...in - JavaScript | MDN

for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)

developer.mozilla.org

includes() 

 

String.prototype.includes() - JavaScript | MDN

includes() 메서드는 하나의 문자열이 다른 문자열에 포함되어 있는지를 판별하고, 결과를 true 또는 false 로 반환합니다.

developer.mozilla.org

Object.keys()

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

 
복사했습니다!