(μ—¬λŸ¬λ²ˆ 더 πŸ“š)JavaScript | pre course 29-object(+getExamResult)

νƒœν˜„Β·2021λ…„ 3μ›” 27일
3
post-thumbnail

πŸ™‹ λͺ©ν‘œ: μžλ°”μŠ€ν¬λ¦½νŠΈ 기초λ₯Ό κ³΅λΆ€ν•˜κ³  λΆ€μ‘±ν•œ 뢀뢄을 μ±„μš°μž.

1. 객체의 ν‚€λ₯Ό λ³€μˆ˜λ‘œ μ ‘κ·Όν•˜κΈ°


πŸ™Œμš°λ¦¬κ°€ κ°μ²΄μ—μ„œ ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ° λ‹€μŒκ³Ό 같은 방법을 μ΄μš©ν•˜λ©΄ 객체의 νŠΉμ • ν‚€ 값을 κ°€μ Έμ˜€λŠ”κ²ƒλ„ κ°€λŠ₯ν•˜κ³ , λ°˜λŒ€λ‘œ 객체의 νŠΉμ • ν‚€λ₯Ό λ§Œλ“€κ³  값을 ν• λ‹Ήν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

const info = {
	name: 'κΉ€κ³Όμž₯'
}
  • 킀와 값을 λ³€μˆ˜λ₯Ό 톡해 λ°›μ•„μ˜€λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
const info = {
	name: 'κΉ€κ³Όμž₯'
}

//방법1
const verb = 'develope'
const project = 'instagram'
info[verb] = project //develope: "instagram"

//방법2
info.developes = 'instagram' //develope: "instagram"

μœ„ 두 μ€„μ˜ μ½”λ“œμ˜ 차이점은 λ¬΄μ—‡μΌκΉŒ?

두 가지 λͺ¨λ‘ 적용이 κ°€λŠ₯ν•˜μ§€λ§Œ μœ—μ€„μ€ λ³€μˆ˜κ°€ κ°€μ§€λŠ” 값에 λ”°λΌμ„œ μœ λ™μ μœΌλ‘œ λ‹€λ₯Έ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” 것이닀.

2. 객체 μˆœνšŒν•˜κΈ°β“


κ°μ²΄λŠ” 기본적으둜 μˆœμ„œκ°€ μ—†λ‹€. 그리고 ν‚€λ₯Ό ν†΅ν•΄μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.

ν•˜μ§€λ§Œ μ—¬λŸ¬κ°€μ§€ 이유둜 객체에 μžˆλŠ” λͺ¨λ“  킀에 ν•œλ²ˆμ”© 접근을 ν•΄μ•Όν•˜λŠ” μ½”λ“œλ₯Ό μ¨μ•Όν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? λ‹€ν–‰μŠ€λŸ½κ²Œλ„ 객체도 λ°°μ—΄μ²˜λŸΌ μˆœνšŒκ°€ κ°€λŠ₯ν•˜λ‹€.

λ‹€λ§Œ, λ°°μ—΄κ³Ό λ‹€λ₯΄κ²Œ λͺ…ν™•ν•˜κ²Œ 정해진 μˆœμ„œλŠ” μ—†κΈ° λ•Œλ¬Έμ—, μ–΄λ–€ μˆœμ„œμ— λ”°λΌμ„œ 객체의 킀에 μ ‘κ·Όν•˜κ²Œ 될 μ§€λŠ” μ•Œ 수 μ—†λ‹€. κ·Έλž˜μ„œ 객체 μˆœνšŒλΌλŠ” 말은 'μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠλŠ” 순회' 라고 ν•  수 μžˆλ‹€.

μš°λ¦¬κ°€ λ°°μ—΄μ—μ„œ 배열을 μˆœνšŒν•  λ•ŒλŠ” for 문을 μ‚¬μš©ν–ˆλŠ”λ° μ½”λ“œλ₯Ό ν•œ 번 확인해 보자.

const arr = ['πŸš€', '🎯', 'πŸš’', '🐷']
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i])
}

반볡문이 λ°°μ—΄μ—μ„œ length λΌλŠ” ν‚€λ₯Ό 가지고 있고, indexλ₯Ό ν†΅ν•œ 접근도 κ°€λŠ₯ν–ˆκΈ° λ•Œλ¬Έμ— λ°°μ—΄ μˆœνšŒκ°€ κ°€λŠ₯ν•œ 것이닀.

κ°μ²΄λŠ” length λΌλŠ” ν‚€κ°€ μ—†λ‹€. index도 μ—†κΈ° λ•Œλ¬Έμ— μ΄λŸ°μ‹μ˜ λ°˜λ³΅λ¬Έμ€ λΆˆκ°€ν•˜λ‹€. λŒ€μ‹ μ— λ‹€λ₯Έ 방법이 μžˆλ‹€. μ΄κ²ƒμœΌλ‘œ 반볡문 μž‘μ„±μ„ ν•˜λŠ” 것이닀.

3. object.keys()


Object.keys λ©”μ†Œλ“œλŠ” μ–΄λ–€ 객체가 가지고 μžˆλŠ” ν‚€λ“€μ˜ λͺ©λ‘μ„ λ°°μ—΄λ‘œ λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ†Œλ“œμ΄λ‹€. 객체의 λ‚΄μž₯ λ©”μ†Œλ“œκ°€ μ•„λ‹ˆλΌ 객체 μƒμ„±μžμΈ Object κ°€ 직접 가지고 μžˆλŠ” λ©”μ†Œλ“œμ΄λ‹€.

const obj = {
	name: 'kim',
  age: 29,
	price: NaN,
  gender: 'man'
}

Object.keys(obj) //["name", "age", "price", "gender"]

μœ„μ™€ 같이 좜λ ₯이 되면 이걸둜 μš°λ¦¬κ°€ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆλ‹€.

const keys = Object.keys(obj) //["name", "age", "price", "gender"]

for (let i = 0; i < keys.length; i++) {
  const key = keys[i] // 각각의 ν‚€
  const value = obj[key] // 각각의 킀에 ν•΄λ‹Ήν•˜λŠ” 각각의 κ°’
  console.log(value)
}
  • μƒˆλ‘œμš΄ ES6 λ¬Έλ²•μ—μ„œλŠ” Object.keys 이외에도 Object μƒμ„±μžμ˜ λ©”μ†Œλ“œμΈ Object.values, Object.entries 와 같은 것듀이 μΆ”κ°€λ˜μ—ˆλ‹€. Object.valuesλŠ” 객체의 ν‚€κ°€ μ•„λ‹Œ κ°’μœΌλ‘œ 이루어진 배열을 return ν•œλ‹€.
const obj = {
	name: 'kim',
  age: 29,
	price: NaN,
  gender: 'man'
}

Object.values(obj) //["kim", 29, NaN, "man"]
  • Object.entries λŠ” 객체의 킀와 κ°’μ˜ 쌍으둜 이루어진 길이 2짜리 λ°°μ—΄λ‘œ 이루어진, 배열을 λ¦¬ν„΄ν•œλ‹€.
const obj = {
	name: 'kim',
  age: 29,
	price: NaN,
  gender: 'man'
}

console.log(Object.entries(obj)); //(4) [Array(2), Array(2), Array(2), Array(2)]
  • λ§₯락정리) Object.keys, Object.values, Object.entries 세가지 μ€‘μ—μ„œ 제일 μœ μš©ν•˜κ²Œ 쓰인닀. κΌ­ μ•Œμ•„λ‘μžπŸš€

4. for-in


객체λ₯Ό μˆœνšŒν•˜λŠ” λ‘λ²ˆμ§Έ λ°©λ²•μœΌλ‘œλŠ” for-in 문이 μžˆλ‹€. λ°˜λ³΅λ¬Έμ€ for λ¬Έκ³Ό 같은 μ’…λ₯˜μ˜ 문법이긴 ν•˜μ§€λ§Œ, 객체와 배열을 μœ„ν•΄ νŠΉλ³„ν•˜κ²Œ μ‘΄μž¬ν•˜λŠ” ES6에 μΆ”κ°€λœ 문법이닀. for-in 은 객체 순회 이외와에도, 일반적인 배열을 μˆœνšŒν•  λ•Œλ„ μ•„μ£Ό μ£Όμš©ν•˜λ‹€.

const arrs = ['coconut', 'banana', 'pepper', 'coriander']
 
for (let i = 0; i < arrs.length; i ++) {
  console.log(i)
  console.log(arrs[i])
}
  • μœ„ μ½”λ“œλ₯Ό κ°„λ‹¨ν•˜κ²Œ μΆ•μ–‘ν•˜λ©΄?
for(let arr in arrs) {
	console.log(i)
	console.log(arr[i])
}

μ΄λŸ°μ‹μœΌλ‘œ 객체λ₯Ό 가지고 for-in 문을 μ‚¬μš©ν•˜λ©΄, i λ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•˜κ³ , λ°°μ—΄μ˜ 길이와 λΉ„κ΅ν•˜κ³  i λ₯Ό 1μ”© μ¦κ°€μ‹œν‚€λŠ” λ“±μ˜ μ½”λ“œλ₯Ό μƒλž΅ν•  수 μžˆλ‹€. 이것은 반볡문이 λͺ‡ 번 λŒμ•„μ•Ό ν•  지λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 λ‚΄λΆ€μ—μ„œ μžλ™μœΌλ‘œ κ²°μ •ν•˜κ²Œ λœλ‹€.

for-in 문은 λ°°μ—΄λΏλ§Œ μ•„λ‹ˆλΌ κ°μ²΄μ—μ„œλ„ μž‘λ™ν•˜λŠ”λ°

const obj = {
	name: 'kim',
  age: 29,
	price: NaN,
  gender: 'man'
}

for (let key in obj) {
  const value = obj[key]
 
  console.log(key)
  console.log(value)
}

μ΄λŸ°μ‹μœΌλ‘œ 객체λ₯Ό 가지고 for-in 문을 μ‚¬μš©ν•˜λ©΄, for-in 문의 index에 ν•΄λ‹Ήν•˜λŠ” λ³€μˆ˜κ°€ μˆ«μžκ°€ μ•„λ‹Œ 객체쀑 각각의 킀에 ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ—΄μ„ ν• λ‹Ήλ°›κ²Œ λœλ‹€.

5. Assignment


μ•„λž˜ μ„€λͺ…을 읽고 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,
    }
    const getExamResult = (scores, requiredClasses) => {
        const result = {};
        const list = {
            "A+":4.5,
            "A":4,
            "B+":3.5,
            "B":3,
            "C+":2.5,
            "C":2,
            "D+":1.5,
            "D":1,
            "F":0    
          }
        for(let key in scores){
            result[key] = list[scores[key]];
        }
        const keys = Object.keys(result)
        for(let i in requiredClasses) {
            if(!keys.includes(requiredClasses[i])) {
            result[requiredClasses[i]] = 0;
        }
      }
        return result;
      }
profile
μ•ˆλ…•ν•˜μ„Έμš”, 지식을 κ³΅μœ ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€