๐Ÿ”ฅ์ง€์˜ฅ์˜ 30๋ฒˆ - ๋ถ„ํ•  ์ •๋ณตํ•˜๊ธฐ

Lemonยท2022๋…„ 5์›” 3์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
14/17
post-thumbnail

๐Ÿ“๊ณผ์ œ

์•„๋ž˜ ์„ค๋ช…์„ ์ฝ๊ณ ย getExamResultย ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”.

์ธ์žย scoresย ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์š”์†Œ์˜ ๊ฐฏ์ˆ˜ ๋ฐ ํ‚ค์˜ ์ด๋ฆ„๋“ค์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๊ฐ’์€ ๋‹ค์Œ 9๊ฐ€์ง€ ๋ฌธ์ž์—ด ์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '์ƒํ™œ์†์˜ํšŒ๊ณ„': 'C',
  '๋…ผ๋ฆฌ์ ๊ธ€์“ฐ๊ธฐ': 'B',
  '๋…์ผ๋ฌธํ™”์˜์ดํ•ด': 'B+',
  '๊ธฐ์ดˆ์ˆ˜ํ•™': 'D+',
  '์˜์–ดํšŒํ™”': 'C+',
  '์ธ์ง€๋ฐœ๋‹ฌ์‹ฌ๋ฆฌํ•™': 'A+',
}

์ธ์žย requiredClassesย ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด๋กœ ๋œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

['์˜์–ดํšŒํ™”', '๊ธฐ์ดˆ์ˆ˜ํ•™', '๊ณตํ•™์ˆ˜ํ•™', '์ปดํ“จํ„ฐ๊ณผํ•™๊ฐœ๋ก ']

๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.

  1. scoresย ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ‚ค๋“ค์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ทธ ๊ฐ’๋“ค์€ ๋‹ค์Œ ์›๋ฆฌ์— ๋”ฐ๋ผ ์ˆซ์ž๋กœ ๋ฐ”๋€Œ์–ด ํ• ๋‹น๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • A+ => 4.5
    • A => 4
    • B+ => 3.5
    • B => 3
    • C+ => 2.5
    • C => 2
    • D+ => 1.5
    • D => 1
    • F => 0
  2. 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๊ฐœ๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • a. ์ธ์žย scoresย ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด
  • b. ์ธ์žย 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; // ๊ฐ์ฒด ๋ฆฌํ„ด
}

๐Ÿ‹์กฐ๊ฑด ๊ตฌํ˜„์˜ ์‹œ์ž‘

๐Ÿšฉ ์กฐ๊ฑด 1 ๋ฌธ์ œ ์‹œ์ž‘

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;
}

์ค‘๊ฐ„์ ๊ฒ€ ํ•ด๋ณธ๋‹ค.

ํ•™์ ์ด ์ˆซ์ž๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค๐Ÿคฉ

โœ… ์กฐ๊ฑด 1 ๋ฌธ์ œ ํ•ด๊ฒฐ!!


๐Ÿšฉ ์กฐ๊ฑด 2 ๋ฌธ์ œ ์‹œ์ž‘

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 ๊ฐ’ ๋„ฃ๋Š” ๊ฒƒ ๊นŒ์ง€ ์•Œ์•˜๋‹ค.

โœ… ์กฐ๊ฑด 2 ๋ฌธ์ œ ํ•ด๊ฒฐ!!


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 ํ†ต๊ณผํ•˜๋Š”๊ฒŒ ์ด๋ ‡๊ฒŒ ์งœ๋ฆฟํ• ์ค„์ด์•ผ!!

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊ฐ€๋ณด์ž๊ณ ~!!

0๊ฐœ์˜ ๋Œ“๊ธ€