const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
}
하지만 객체에는 위와같이 사용할 수 없다. 위 예시에서 배열은 length라는 키를 가지고 있고 그걸 . dot notation으로 접근해서 사용하는 것인데, 객체는 length라는 키를 가지고 있지 않고, 인덱스도 없기 때문에 이런식으로 반복문을 사용할 수 없다.
.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);