for.. in 반복문으로 객체, 배열 순회하며 수정 및 추가하기

라용·2022년 8월 21일
0

위코드 - 스터디로그

목록 보기
12/100

wecode 레플릿 과제를 풀며 정리한 내용입니다.

for.. in 문을 활용해 객체 및 배열을 순회하는 방법으로 푸는 문제입니다. getExamResult 함수는 매개변수로 scoresrequiredClasses 를 받습니다. scores 는 아래와 같이 객체 형태의 과목과 점수를 갖습니다.

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

requiredClasses 인자는 문자열로 된 과목을 갖습니다.

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

문제

  1. socres 객체가 가지고 있는 key 값들을 새로운 객체에 포함하 돼 그 value 값들은 아래처럼 숫자로 바꾸어 할당해야 합니다.
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
  1. requiredClasses 배열의 요소로 존재하지만, scores 의 키로 존재하지 않는 항목이 있다면 새로운 객체의 key 로 추가하고 value0을 가집니다.

풀이

1번 문제를 해결하기 위해 변경되어야 할 점수값을 객체로 맵핑하고, 새로운 정답을 담을 빈 객체를 만들어 주고, for in 반복문으로 객체를 돌며 점수를 숫자로 바꾸어줍니다.

const getExamResult = (scores, requiredClasses) => {

	const changeScores = {
		"A+" : 4.5,
		"A" : 4,
		"B+" : 3.5,
		"B" : 3,
		"C+" : 2.5,
		"C" : 2,
		"D+" : 1.5,
		"F" : 0,
	};
	
	const answer = {};
	
	for (let key in scores) {
		answer[key] = changeScores[scores[key]];
	}
}

두번재 문제는 두가지 인자를 비교하기 위해 첫번째 인자인 scores 의 과목 이름을 배열로 만들고, 배열을 돌며 해당 이름이 두번째 인자 배열에 없을 경우 (indexOf 로 확인, 순서 필요 없음) value 를 0으로 해서 정답 객체에 넣어 줍니다.

const getExamResult = (scores, requiredClasses) => {

	const changeScores = {
		"A+" : 4.5,
		"A" : 4,
		"B+" : 3.5,
		"B" : 3,
		"C+" : 2.5,
		"C" : 2,
		"D+" : 1.5,
		"F" : 0,
	};
	
	const answer = {};
	
	for (let key in scores) {
		answer[key] = changeScores[scores[key]];
	}
	
	// 두번재 문제 해결
	
	const titles = Object.keys(scores);
	
	for (let i in requiredClasses) {
		if (titles.indexOf(requiredClasses[i]) === -1) {
			answer[requiredClasses[i]] = 0;
	}
	return answer;
}

아래처럼 데이터를 넣어서 확인 가능합니다.

  const total = {
    '생활속의회계': 'C',
    '논리적글쓰기': 'B',
    '독일문화의이해': 'B+',
    '기초수학': 'D+',
    '영어회화': 'C+',
    '인지발달심리학': 'A+',
  }
  
  const subject = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
  
  console.log(getExamResult(total, subject));
profile
Today I Learned

0개의 댓글