
getExamResultย ํจ์๋ฅผ ๊ตฌํํ์ธ์.์ธ์ย scoresย ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด์
๋๋ค. ๊ฐ์ฒด์ ์์์ ๊ฐฏ์ ๋ฐ ํค์ ์ด๋ฆ๋ค์ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๊ฐ์ฒด์ ๊ฐ์ ๋ค์ 9๊ฐ์ง ๋ฌธ์์ด ์ค์์ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
{
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
}
์ธ์ย requiredClassesย ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ ๋ฐฐ์ด์
๋๋ค.
['์์ดํํ', '๊ธฐ์ด์ํ', '๊ณตํ์ํ', '์ปดํจํฐ๊ณผํ๊ฐ๋ก ']
๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋๋ก ํจ์๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
scoresย ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํค๋ค์ ์๋ก์ด ๊ฐ์ฒด์ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๋จ, ๊ทธ ๊ฐ๋ค์ ๋ค์ ์๋ฆฌ์ ๋ฐ๋ผ ์ซ์๋ก ๋ฐ๋์ด ํ ๋น๋์ด์ผ ํฉ๋๋ค.requiredClassesย ๋ฐฐ์ด์ ์์๋ก๋ ์กด์ฌํ์ง๋ง,ย scores์ ํค๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ด ์๋ค๋ฉด, ํด๋น ์์๋ ์๋ก์ด ๊ฐ์ฒด์ ํค๊ฐ ๋๊ณ , ๊ฐ์ผ๋ก 0์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์์์ ์์๋ก ๋ฌ์ฌ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์ธ์๋ก ๋ค์ด์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด๊ณผ ๋ฆฌํด๋ฉ๋๋ค. ์์๊ฐ ์์๋ ๋ค๋ฅผ์ ์์ง๋ง, ์ฑ์ ์ ๋ฌด๊ดํฉ๋๋ค.{
'์ํ์์ํ๊ณ': 2,
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 3,
'๋
์ผ๋ฌธํ์์ดํด': 3.5,
'๊ธฐ์ด์ํ': 1.5,
'์์ดํํ': 2.5,
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 4.5,
'๊ณตํ์ํ': 0,
'์ปดํจํฐ๊ณผํ๊ฐ๋ก ': 0,
}

๋ฌธ์ ๋ฅผ ์๋ฌด๋ฆฌ ์ฝ์ด๋ ์ด์ฉ๋ฉด ์ข์์ง ์๋๋ ์๋ฌ๋ค..ใ
๋คํํ Q&A ์๊ฐ์ด ์์ด์ ๋ฉํ ๋๊ป ์ง๋ฌธํ๊ณ ํด๋ต์ ์ป์๋๋ฐ, ํด๋ต์ ์ป์๋ ๊ณผ์ ๋ค์ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ์ ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐ์ ๋์ดํด๋ณด์๋ค.
1. ํ์ ์ ์ซ์๋ก ๋ณํํ๋ค.
2-1. requiredClasses ํจ์ ์์ย ๋ฐฐ์ด์ ์์๋ก๋ ์กด์ฌํ์ง๋ง,ย scores์ ํค๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ด ์๋ค๋ฉด
โ ํญ๋ชฉ ๊ฒ์ฌ
2-2. 2-1์ ํฌํจ๋๋ ์์๋ค์ ์๋ก์ด ๊ฐ์ฒด์ ํค๊ฐ ๋๋ค
2-3. 2-2์ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ ๊ฐ๋ค์ value๋ก 0์ ๊ฐ์ง๋ค.
์ชผ๊ฐ ๋ฌธ์ ๋ค์ ๊ธฐ์ค์ผ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ์ ํด๋ณธ๋ค.
1. getExamResultย ํจ์๋ฅผ ๊ตฌํํ๊ธฐ
2. getExamResultย ๋ ์ธ์ 2๊ฐ๋ฅผ ๋ฐ๋๋ค.
scoresย ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒดrequiredClassesย ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ ๋ฐฐ์ดfunction getExamResult(scores, requiredClasses){
}
const scores = {
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
}
const requiredClasses = ['์์ดํํ', '๊ธฐ์ด์ํ', '๊ณตํ์ํ', '์ปดํจํฐ๊ณผํ๊ฐ๋ก ']
3. getExamResult ํจ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋๋ก ๊ตฌํํ๋ค.
function getExamResult(scores, requiredClasses){
const result = {} // ๊ฐ์ฒด
return result; // ๊ฐ์ฒด ๋ฆฌํด
}
4. scoresย ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํค๋ค์ ์๋ก์ด ๊ฐ์ฒด์ ํฌํจ
4-1. ํ์ ์ ์ซ์๋ก ๋ณํํ๋ค.
function convertGrade(grade){
if(grade==="A+") {
return 4.5;
}
if(grade==="A") {
return 4;
}
if(grade==="B+") {
return 3.5;
}
if(grade==="B") {
return 3;
}
if(grade==="C+") {
return 2.5;
}
if(grade==="C") {
return 2;
}
if(grade==="D+") {
return 1.5;
}
if(grade==="D") {
return 1;
}
if(grade==="F") {
return 0;
}
}
console.log(convertGrade("A+")) // 4.5
4-2. ๋ฆฌํฉํ ๋ง
if๋ก ์ ๊ธฐ ๋๋ฌด ๊ท์ฐฎ๋ค. ๋ฆฌํฉํ ๋ง ํด๋ณด์
A+ = 4.5
A = 4
๊ฒฐ๊ตญ ์ด ์์์ ๊ฐ์ฒด์ด๋ค.
A+ : 4.5,
A : 4,
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]
}
4-3. getExamResult ํจ์์ ์กฐ๊ฑด 1 ์ ์ฉํ๊ธฐ
convertGrade ๊ฐ scores object๋ฅผ ๋๋ฉด์ key๊ฐ์ ์ ๋ถ number๋ก ๋ค ๋ฐ๊ฟ์ค์ผ ํ๋ค.
๐ค ๊ฐ์ฒด๋ ์ด๋ป๊ฒ ํ๋ฐํด ๋ ์ ์์๊น?
4-3-0. object(๊ฐ์ฒด)๋ฅผ loopํ๋ ๋ฒ ๊ตฌ๊ธ๋ง
๐ ๊ตฌ๊ธ๋ง โhow to loop object in javascriptโ
Tip. ์ฒซ๋ฒ์งธ ๋์ค๋ ๊ฒ์๋ฌผ์ ๋ด๋ ๋์ง๋ง MDN(๊ณต์๋ฌธ์)๊ฐ ์๋ค๋ฉด ๊ณต์๋ฌธ์๋ฅผ ๋จผ์ ๋ณด์

๐ก ๊ตฌ๊ธ๋ง์ ํตํด ์๊ฒ ๋ ์ฌ์ค
๊ณต์๋ฌธ์์ ์ ์ ์ดํด์๋๋๊น ์์์ฝ๋ ์ดํด๋ณด์

property ๋ก key๊ฐ์ ์ป์ ์ ์๊ณ , object[property]๋ก value๊ฐ์ ์ป์ ์ ์๋ค.
๐๐ป ๋ฐ๋ผ์ for(const property in object)์ ์ฌ์ฉํด์ scores[property] ๋ก value์ธ ํ์ ์ ์ป์ ์ ์๋ค.
๋ง๋ค์ด๋์ getExamResultํจ์์ scores๊ฐ์ฒด์ ํ์ ์ convertGradeํจ์๋ก ์ซ์๋ก ๋ฐ๊ฟ์ ์๋ก์ด ๊ฐ์ฒด์ value๋ก ๋ฃ์ด๋ณด์.
const scores = {
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
}
function getExamResult(scores, requiredClasses){
const result = {}
for(const property in scores){
result[property] = convertGrade(scores[property])
}
return result;
}

์ค๊ฐ์ ๊ฒ ํด๋ณธ๋ค.

ํ์ ์ด ์ซ์๋ก ๋ฐ๋์๋ค๐คฉ
5. requiredClassesย ๋ฐฐ์ด์ ์์๋ก๋ ์กด์ฌํ์ง๋ง,ย scores์ ํค๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ด ์๋ค๋ฉด โ ํญ๋ชฉ ๊ฒ์ฌ ํ
5-1. ๋ฐฐ์ด์ ์์๋ก๋ ์กด์ฌ โ ๋ฐฐ์ด์ ํ๋ฐํด ๋๋ฉด์ ํ์ธํด์ผ๋ ๋ฏ ํ๋ค. ๋ฐฐ์ด์ loopํ๋ค.
5-2. ํค๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ
5-2-0. ํค๋ก ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ ์ฐพ๋ ๋ฐฉ๋ฒ ๊ตฌ๊ธ๋ง
๐ ๊ตฌ๊ธ๋ง โjavascript how to check if exists in object โ
๐ก ๊ตฌ๊ธ๋ง์ ํตํด ์๊ฒ ๋ ์ฌ์ค

key !== undefined ์ฌ์ฉํ์ง ๋ง์๋ผ ! (5000ํ๋ ๋ฐ์๋ค)
๐ค undefined๋ฅผ ์๋ํ ์ด์ ๋ ๋ญ๊น?

โ ์๋ key ๊ฐ์ ์ ๊ทผํ๋ฉด undefined๊ฐ ๋์จ๋ค.
๐ค ์ ์ฐ์ง ๋ง๋ผ๋๊ฑธ๊น?
const scores = {
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
'๊ณตํ์ํ': undefined,
}
โ key๊ฐ์ด undefined์ธ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
undefined๋ง๊ณ in์ ์ฌ์ฉํด๋ผ!

scores ๊ฐ์ฒด์ in์ ์ฌ์ฉํด๋ดค๋ค.

์๋ key๊ฐ์ธ โ๊ณตํ์ํโ์ด false๋ก ๋์ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๐
key๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ ๊ฒ์ฌ๋ (key in obj)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค
5-2-1. key๊ฐ ์๋์ง ์๋์ง๋ฅผ ์ฒดํฌํ๋ loop ํจ์์ธ checkRequiredClass๋ฅผ ๋ง๋ค์
key๊ฐ์ ์ฒดํฌํด์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ด์๋ด์ผ ํ๋๊น. ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํด์ฃผ๋ .map() ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.

const requiredClasses = ['์์ดํํ', '๊ธฐ์ด์ํ', '๊ณตํ์ํ', '์ปดํจํฐ๊ณผํ๊ฐ๋ก ']
function checkRequiredClass(){
return requiredClasses.map(checkScoresKey)
}
requiredClasses ๋ฐฐ์ด์ ๋๋ฉด์ checkScoresKey ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ์๋ก์ด ๋ฐฐ์ด๋ก return ํด์ค ๊ฒ์ด๋ค.
5-2-2. key๊ฐ์ด scores ์ key๊ฐ๊ณผ ๊ฐ์์ง๋ฅผ ํ์ธํด์ ํค๋ก ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ ๊ณจ๋ผ๋ด๋ ํจ์์ธ checkScoresKey ๋ฅผ ๋ง๋ค์.

โ
checkRequiredClass ํจ์ ํ์ธํด๋ณด๊ธฐ

๐
๐ปโโ๏ธ ๋ญ๊ฐ ์๋ชป๋์ง...???????????????????????
console.log() ๋ก ํ์ธํด๋ณด์.

scores ๊ฐ์ฒด์ key ๊ฐ์ ์ ๋๋ก ๋ค์ด์จ๋ค.
๊ทธ๋ผ ์ด์ if ์์๋ key ๊ฐ์ด ์ ๋๋ก ๋ค์ด์ค๋์ง ๋ณด์

key in์ ์๋๋ฐ key out์ด ์๋ค.
key out ์กฐ๊ฑด ๋ฐ์์ console.log ๋ฅผ ํ์ธํด๋ณด๋ true false๊ฐ์ด ์ ๋๋ก ๋์จ๋ค.

โก !(not) ์ฐ์ฐ์ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผ๋ ๊ฒ!
(!key in scores) โ key๋ฅผ not์ผ๋ก ๋ง๋ค ๊ฒ์ด๋ค.
key๊ฐ์ด ์๋ ๊ฒ์ฌํ ๊ฒฐ๊ณผ(false)๋ฅผ not์ผ๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒ์ด๋ค.
( !(key in scores) ) โ ์ ์ฒด๋ฅผ ๊ดํธ๋ก ๋ฌถ๊ณ not์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ค๋ค.
โ scores ๊ฐ์ฒด ์์ key๊ฐ false๋ฉด true๋ก ๋ฐ๊พธ๊ณ return key ์กฐ๊ฑด์ ์คํํ๋ค.
โ
checkRequiredClass ํจ์ ํ์ธ ์๋ฃ

scores ๊ฐ์ฒด์ key์ requiredClasses ๋ฐฐ์ด์ ๊ฐ์ ๋น๊ตํด์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํ ์ฑ๊ณต!!๐คฉ
6. ํค๋ก ์กด์ฌํ์ง ์๋ ํญ๋ชฉ๋ค์ ์๋ก์ด ๊ฐ์ฒด์ ํค๊ฐ ๋๋ค.
โ checkRequiredClass๋ก ์ฐพ์๋ธ ์๋ ํค ์์๋ค์ ์๋ก์ด ํค๋ก ๋ง๋ค๊ณ ์ถ๋ค

undefined๋ฅผ ์์ ๋ฉด ๊น๋ํ ๊ฒ ๊ฐ์๋ฐ๐ค
6-0. ๋ฐฐ์ด์ undefined ์์ ๋ ๋ฒ ๊ตฌ๊ธ๋ง
๐ ๊ตฌ๊ธ๋ง โjavascript array undefined removeโ
๐ก ๊ตฌ๊ธ๋ง์ ํตํด ์๊ฒ ๋ ์ฌ์ค

filter() ๋ฅผ ์ฌ์ฉํ๋๊ตฌ๋?
๊ทผ๋ฐ filter()๊ฐ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
๐ ๊ตฌ๊ธ๋ง โmdn filterโ

ํ๊ธ ์ค๋ช
์ด ์ดํด๊ฐ ์๋๋ฉด ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋๋ค.

false์ falsy๊ฐ์ธ undefined๋ [] ๋น ๋ฐฐ์ด์ returnํด์ฃผ๋๊ฑธ ๋ณผ ์ ์๋ค.
filter()์ ๋ง๋ ์กฐ๊ฑด์ธ ๊ฒ๋ค์ด ๋ฐฐ์ด๋ก ๋์ค๋๊น key๊ฐ์ด undefined๊ฐ ์๋ ๊ฒ๋ค๋ง ์ ๋ฐฐ์ด๋ก ๋์ค๋๋ก ํ๋ฉด ๋๊ฒ ๋ค.
function checkRequiredClass(){
return requiredClasses.map(checkScoresKey).filter((key) => key !== undefined);
}

โ
undefined๋ฅผ ์์ ๊ธฐ ์ฑ๊ณต
์ด์ ํฌํจ๋์ง ์์ ๊ณผ๋ชฉ๋ค๋ง ๋ฐฐ์ด๋ก ๋์๋ค. getExamResultย ํจ์์ key๊ฐ์ผ๋ก ๋ฃ์ด์ค์ผํ๋ค.
๐ก๊ฐ์ฒด์ key๊ฐ์ ์ถ๊ฐํ๋ ๋ฒ

7. ํฌํจ๋์ง ์์ ๊ณผ๋ชฉ์ key ๊ฐ๋ค์ value๋ก 0์ ๊ฐ์ง๋ค.
์ด์ฉ๋ค๋ณด๋ key๋ก ๋ฃ๊ณ value์ 0 ๊ฐ ๋ฃ๋ ๊ฒ ๊น์ง ์์๋ค.
8. getExamResult ํจ์ ์์ ์กฐ๊ฑด 2๋ฅผ ์ ์ฉ์ํค์

requiredClasses ๋ฐฐ์ด์ .map()๋๋ฉด์ scores ๊ฐ์ฒด์ key๊ฐ์ด๋ ๋น๊ตํ์ ๋ false์ผ ๊ฒฝ์ฐ true๋ก ๋ณํํด์ result[key] = 0 ์ผ๋ก ๋ฐํํ๋ค.
function getExamResult(scores, requiredClasses){
const result = {}
for(const property in scores){
result[property] = convertGrade(scores[property])
}
requiredClasses.map(key=>{
if(!(key in scores)){
result[key] = 0
}
})
return result;
}
// 1. ํ์ ์ ์ซ์๋ก ๋ณํ
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]
}
const scores = {
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
}
const requiredClasses = ['์์ดํํ', '๊ธฐ์ด์ํ', '๊ณตํ์ํ', '์ปดํจํฐ๊ณผํ๊ฐ๋ก ']
console.log(getExamResult(scores,requiredClasses))

๐ข ๊ฐ์ฒด[key๊ฐ] = value ์ดํดํ๋๋ฐ ์ค๋๊ฑธ๋ ธ๋ค.. ๊ทธ๋๋ ์ฒ์ ๋ฌธ์ ๋ดค์๋๋ ๋ฉ๋ถ์ด์๋๋ฐ, ํ๋ค๋ณด๋ ํ๋ฆฌ๊ธดํด์ ์ ๊ธฐํ๋ค.. test ํต๊ณผํ๋๊ฒ ์ด๋ ๊ฒ ์ง๋ฆฟํ ์ค์ด์ผ!!