객체의 value 값을 수정한 새로운 객체를 만들자

Pien·2022년 8월 18일
0

위코드

목록 보기
1/10
post-thumbnail

Assignment

함수에는 매개변수로 객체와 배열 각각 1개씩 받는다.
첫번째 매개변수는 과목이름 (key) : 등급 (value)이 들어있는 객체를 매개변수로 받고 두번째 매개변수는 과목이름만 들어있는 배열을 매개변수로 받게 된다.

  1. 첫번째 매개변수 내에 value값은 현재 문자열로 되어있는데, 이를 등급에 맞는 숫자로 변환하여 새로운 객체에 추가
  2. 두번째 매개변수 배열안의 값이 1. 에서 만든 새로운 객체안에 key값으로 존재 하지 않을경우 value를 0으로 해서 객체에 추가

처음 코드를 구현 했을때 1. > 2.으로 로직을 구현 했다. 미리 입력된 for문이 끝난 순간 객체가 완성되게 하고 싶어 여러 시도를 한 후, 작동 순서를 2. > 1.로 변경해 결과물을 출력하게 되었다.

1. 중복된 값을 제외한 값을 기존 객체에 집어 넣기

const getExamResult = (scores, requiredClasses) => {
  const keyArray = Object.keys(scores);
  const filterToClass = requiredClasses.filter(el => !(keyArray.includes(el)));
   for(let i = 0; i<filterToClass.length; i++){
     scores[filterToClass[i]] = 0;
   } 
  const numericScores = {
    }; ...

기본으로 getExamResult함수에 scoresrequiredClasses 두개의 매개변수를 받는다. scores는 객체, requiredClasses는 배열이다.

먼저 객체와 배열에 있는 중복 값을 쉽게 걸러내기 위해 객체에 있는 key값을 배열로 전환시켜주는 Object.keys(scores) 메소드를 사용해 변수 keys에 객체의 key값을 배열로 저장 시켰다.

그 후, filter,includes 메서드를 조합 해, 두 배열이 중복 되지 않는 값만 filterToClass 변수를 생성해 할당한 뒤, 반복문을 통해 filterToClass의 값을 value = 0 을 할당해 scores 에 집어 넣었다. 이제 남은 건 기존 객체 값에 value를 등급 > 숫자로 바꾼뒤 새로운 객체에 넣으면 끝난다.

2. 객체의 value 값을 맞는 숫자로 바꾸고 새로운 객체에 집어 넣기

for (let key in scores) {
    const value = scores[key];
    let scorevalue = 0;
    
    switch(value) {
      	case "A+":
        scorevalue = 4.5;
        break;
        case "A":
        scorevalue = 4;
        break;
        // --------------//
        case "F":
        scorevalue = 0;
        break;
    }
    numericScores[key] = scorevalue;
  }
  return numericScores;
}

for...in문은 객체를 순회 할 수 있는 방법중 하나이며, for...in 문의 특징은 객체의 값만큼 반복하며, 인덱스로 key에 해당하는 문자열을 할당 받는데 이를 통해 객체의 모든 값에 손쉽게 접근할 수 있다. 이 반복문을 사용해 새로운 객체에 값을 넣어 줄 것이다.

value 변수를 생성해 scores 객체의 value 값을 할당한다. for...in 문 에서 인덱스로 객체의 key 값을 받고 있으니, scores[key] 를 할당하면 객체의 현재 인덱스인 key값의 value를 value 변수에 할당 하게 된다.
value 에 할당된 값은 현재 문자열로 되어있는데, 이를 switch 문을 이용해 숫자로 변환시켜 준다.

마지막으로 반복문 내에서 numericScores[key] = scorevalue 를 할당하면 scores 객체를 순회 하며 numericScores 객체에 key와 숫자로 변환된 value값을 하나씩 차곡차곡 넣어주게 될 것이다.


해당 문제를 푸는데 많은 시간이 들었다.
하지만, 이번 문제를 풀면서 객체와 많이 친해진 느낌이 든다.

0개의 댓글