JS | repl.it - 30.object getExamResult 함수 구현하기

Chloe K·2022년 9월 21일
1
post-thumbnail

Object.keys()

Object.keys() 메소드는 주어진 객체의 속성 이름들(즉 key값)을 일반적인 반복문과 동일한 순서로 순회하고 배열로 반환한다.

객체의 키에 접근하기

const object = {
  a: "Mike",
  b: "student",
  c: "male",
}

console.log(Object.keys(object));
// ["a", "b", "c"] 배열로 반환
const arr = ["a", "b", "c"];

console.log(Object.keys(arr));

// ["0", "1", "2"]

for-in문 - 객체 순회하기

  1. for 문
const obj = {
  a: "Mike",
  b: "student",
  c: "male",
}

const keys = Object.keys(obj);
// ["a", "b", "c"] 

for(let i = 0; i < keys.length; i++) {
  const key = keys[i]; // 각각의 키
  const value = obj[key]; // 각각의 키에 해당하는 각각의 값
}
  1. for-in 문
    ES6에 도입된 문법으로 객체의 모든 열거 가능한 속성에 대해 반복한다. key값을 반환하고, 배열인 경우에는 index를 반환한다.
    (let i = 0; i < keys.length; i++)와 같은 문법을 간단하게 작성할 수 있다.
for(let key in obj) {
  console.log(key);
  console.log(obj[key]);
}
// "a"
// "b"
// "c"
// "Mike"
// "student"
// "male"

repl.it | JavaScript - 30.object

Assignment

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

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

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '생활속의회계': '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을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.

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

👉방법1


const getExamResult = (scores, requiredClasses) {
  let result = {};
  let grades = {
    "A+": 4.5,
    "A": 4,
    "B+": 3.5,
    "B": 3,
    "C+": 2.5,
    "C": 2,
    "D+": 1.5,
    "D": 1,
    "F": 0,
  }
  
  for (let property in scores) {
    result[property] = grades[scores[property]]
  }
  
  const keys = Object.keys(result);
  // 배열로 반환
  
  
  for (let i in requiredClasses) {
    if(!keys.includes(requiredClasses[i])) {
      result[requiredClasses[i]] = 0;
    }
  }
  
  return result
}

👉방법2

function convertGrade(grade) {
  const convert = {
    'A+' : 4.5,
    'A' : 4,
    'B+' : 3.5,
    'B' : 3,
    'C+' : 2.5,
    'C' : 2,
    'D+' : 1.5,
    'D' : 1,
    'F' : 0
  }
  
  return convert[grade];
}

function getExamResult(scores, requiredClasses) {
  const result = {};

  for(const property in scores) {
    result[property] = convertGrade(scores[property])
  }
  
  requiredClasses.forEach(subject => {
  	if(!(subject in scores)) {
    	result[subject] = 0;
    }
  })
  
  return result;
}
profile
Frontend Developer

0개의 댓글