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 ํต๊ณผํ๋๊ฒ ์ด๋ ๊ฒ ์ง๋ฆฟํ ์ค์ด์ผ!!