JS - Obj / TIL - 6

주지홍·2022년 1월 2일
0

TIL

목록 보기
10/25
post-thumbnail

객체의 키를 변수로 접근하기

const information = {
  name: '김개발'
};

const verb = 'developes';
const project = 'facebook';

information[verb] = project; // [A]

information.developes = 'facebook' // [B]

console.log(information)
  • A의 방식으로 할당할 경우
    변수 verb와 project가 가지는 값에 따라 다른 키와 다른 값을 가지는게 가능해진다.
  • B의 방식으로 할당할 경우
    키와 값은 항상 정해져 있음.

객체 순회하기

배열과 다르게 명확하게 정해진 순서가 없기 때문에, 어떤 순서에 따라 객체의 키에 접근하게 될지 알 순 없다. 따라서 객체의 순회는 '순서가 보장되지 않은 순회' 라고 부름.

Object.keys 메소드는 어떤 객체가 가지고 있는 키들의 목록을 배열로 리턴하는 메소드

const obj = {
  name: 'melon',
  weight: 4350,
  price: 16500,
  isFresh: true
}

const keys = Object.keys(obj)

for (let i = 0; i<keys.length; i++) {
  const key = keys[i] // 각각의키
  const value = obj[key] // 각각의 키에 해당하는 각각의 값
  console.log(value);
}

Object.values

  • 객체의 키가 아닌 값으로 이루어진 배열을 리턴

Object.entries

  • 객체의 키와 값의 쌍으로 이루어진 길이 2짜리 배열로 이루어진, 배열을 리턴
  • 각 배열에서 인덱스 [0]의 값은 각각의 키를, 인덱스 [1]의 값은 해당 키에 해당하는 값을 가지게 됩니다.

객체를 순회하는 두번째 방법 for-in 문

반복문인 for문과 같은 종류의 문법, 객체와 배열을 위해 특별히 존재하는, ES6 에서 추가된 문법. 이건 객체 순회 외에도, 일반적인 배열을 순회할때도 아주 유용

- 배열의 경우 -

  const arr = ['coconut', 'banana', 'pepper', 'coriander']

for (let i = 0; i < arr.length; i ++) {
  console.log(i)
  console.log(arr[i])
}


for (let i in arr) {
  console.log(i)
  console.log(arr[i])
}

- 객체의 경우 -

const obj = {
  name: 'melon',
  weight: 4350,
  price: 16500,
  isFresh: true
}

for (let key in obj) {
  const value = obj[key]

  console.log(key)
  console.log(value)
}

객체를 가지고 for-in 문을 사용하면, for-in 문의 인덱스에 해당하는 변수가, 숫자가 아닌 객체의 각각의 키에 해당하는 문자열을 할당받게 된다.

문제


문제 1 : getExamResult 함수를 구현하세요.

인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 

객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'

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

인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.

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

다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요.

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

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

requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 

해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 

위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 

요소간 순서는 다를수 있지만, 채점에 무관합니다.

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

- 풀이

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

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



const getExamResult = (scores, requiredClasses) => {
  const result = {};
  const obj = {
    'A+' : 4.5,
    'A'  : 4,
    'B+' : 3.5,
    'B'  : 3,
    'C+' : 2.5,
    'C'  : 2,
    'D+' : 1.5,
    'D'  : 1,
    'F'  : 0
    }

  for (let i = 0; i < requiredClasses.length; i++){
    let key = requiredClasses[i];
    result[key] = 0;
  }
  
  for (let scores_key in scores) {
    let scores_value =scores[scores_key]; // C, D, ...
    let obj_value = obj[scores_value]; //4.5, 4, 3.5, ...
    
    result[scores_key] = obj_value
  }
  return result;
}
profile
오늘도 내일도 끊임없는 싸움

0개의 댓글

관련 채용 정보