repl.it object3 assignment

Doyoon Lee·2020년 8월 16일
0

기본 for 문은 배열에만 사용이 가능하다.

const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i])
}

하지만 객체에는 위와같이 사용할 수 없다. 위 예시에서 배열은 length라는 키를 가지고 있고 그걸 . dot notation으로 접근해서 사용하는 것인데, 객체는 length라는 키를 가지고 있지 않고, 인덱스도 없기 때문에 이런식으로 반복문을 사용할 수 없다.

객체에 반복문을 사용하고 싶으면 어떻게 해야할까?

첫번째 방법 - Object.keys()

.keys() 메소드는 특정 객체가 가지고있는 키들을 배열로 리턴한다.

keys 메소드는 객체 생성자인 Object 가 가지고 있다.

syntax

Object.keys(object이름)

const grocery = {
  name: 'melon',
  weight: 4350,
  price: 16500,
  isFresh: true
}

Object.keys(grocery) // ['name', 'weight', 'price', 'isFresh']

keys를 사용하고 나면 배열을 리턴하기 때문에 그 배열을 이용해서 반복문을 사용할 수 있다.

const keys = Object.keys(grocery) // 키로 이루어진 배열 리턴해서 keys라는 변수에 담음 

for (let i = 0; i < keys.length; i++) {
  const key = keys[i] // 각각의 키들을 key에 담음
  const value = grocery[key] 
	// grocery객체의 key들에 [] bracket으로 접근해서 각각의 키에 해당하는 각각의 값을 value에 담음

  console.log(value)
} // for문을 돌면서 하나씩 각각 key에 들어가고 value에 들어간다. 

그 외에도

Object.values(object이름)

객체의 값으로 이루어진 배열 리턴

Object.entries(object이름)

객체의 키와 값의 쌍으로 이루어진 길이 2짜리 배열들로 이루어진, 배열을 리턴.

불러서 사용하고 싶을때는 ,

각 배열에서 인덱스[0]의 값은 각각의 키, 인덱스[1]의 값은 해당 키에 해당하는 값이므로 그런식으로 접근한다.

const values = Object.values(obj)
// values === ['melon', 4350, 16500, true]

**c**onst entries = Object.entries(obj)

/* entries의 리턴 값
[
  ['name', 'melon'],
  ['weight', 4350],
  ['price', 16500],
  ['isFresh', true]
]
*/

for of 문

iterable 이란 무엇인가?

https://javascript.info/iterable

레플릿 객체 문제 - Model Solution

// Assignment - 방법 1.
const getExamResult = (scores, requiredClasses) => {
  const result = scores;
  for(let key in result){
    if(result[key] === "A+"){
      result[key] = 4.5;
    }
    else if(result[key] === "A"){
      result[key] = 4;
    }
    else if(result[key] === "B+"){
      result[key] = 3.5;
    }
    else if(result[key] === "B"){
      result[key] = 3;
    }
    else if(result[key] === "C+"){
      result[key] = 2.5;
    }
    else if(result[key] === "C"){
      result[key] = 2;
    }
    else if(result[key] === "D+"){
      result[key] = 1.5;
    }
    else if(result[key] === "D"){
      result[key] = 1;
    }
    else if(result[key] === "F"){
      result[key] = 0;
    }
  }
  requiredClasses.forEach((el) => {
   if(result[el] === undefined){
      result[el] = 0;
    }
  })
  return result
}
// Assignment - 방법 2
const getExamResult = (scores, requiredClasses) => {
  let result = {};
  let obj = {
    '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]  = obj[scores[key]]
    console.log(result[key]);
  }
  
  const keys = Object.keys(result) // 생활속의회계, 논리적글쓰기 ... 
  for(let i in requiredClasses) { // 영어회화, 기초수학 ...
    if(!keys.includes(requiredClasses[i])) { 
			// required의 요소를 한개씩 불러와서 그게 keys에 없으면
      result[requiredClasses[i]] = 0; // value를 0으로 주면서 알아서 들어간다. 
    }
  }
  
  return result
}

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

requiredClasses = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론'];
getExamResult(scores, requiredClasses);

0개의 댓글