CodingTest/JavaScript Q
[JavaScript] object의 value을 변경하고 추가
yangseon
2022. 9. 25. 21:40
문제) 아래 설명을 읽고 getExamResult 함수를 구현하세요.
인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.
- 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
- 인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
- 다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요.
- scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
- A+ => 4.5
- A => 4
- B+ => 3.5
- B => 3
- C+ => 2.5
- C => 2
- D+ => 1.5
- D => 1
- F => 0
- requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.
{
'생활속의회계': 2,
'논리적글쓰기': 3,
'독일문화의이해': 3.5,
'기초수학': 1.5,
'영어회화': 2.5,
'인지발달심리학': 4.5,
'공학수학': 0,
'컴퓨터과학개론': 0,
}
객체의 키를 변수로 접근하기
const information = {
name: '마요네즈'
}
const verb = 'developes'
const project = 'facebook'
information[verb] = project [A]
information.developes = 'facebook' [B]
- verb의 값을 키로 사용해야 하고, project의 값을 그 키의 값으로 사용한다고 했을때
- A와 같이 할당이 가능합니다.
- B의 방식으로도 할당이 가능할 수도 있겠지만, 이 경우 키와 값은 항상 정해져 있게 됩니다.
- 하지만 A와 같은 방법은 변수 verb와 project가 가지는 값에 따라 다른 키와 다른 값을 가지는게 가능해집니다.
객체 method
const obj = {
name: 'melon',
weight: 4350,
price: 16500,
isFresh: true
}
Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']
Object.values(obj) // ['melon', 4350, 16500, true]
Object.entries(obj) // [name: 'melon', weight: 4350, price: 16500, isFresh: true]
- Object.keys() : 어떤 객체가 갖고 있는 key을 배열로 리턴하는 method
- Object.keys() : 객체의 키가 아닌 값으로이루어진 배열을 리턴하는 method( value 값을 의미)
- Object.entries() : 객체의 키와 값을 쌍으로 이루어진 배열을 리턴하는 method
const getExamResult = (scores, requiredClasses) => {
let objScores = {};
for(let i in requiredClasses){
const addArray = requiredClasses[i];
objScores[addArray] = 0;
}
console.log(objScores);
for (let key in scores) {
const val = scores[key]
if (val === "A+") {
objScores[key] = 4.5;
} else if (val === "A") {
objScores[key] = 4;
} else if (val === "B+") {
objScores[key] = 3.5;
} else if (val === "B") {
objScores[key] = 3;
} else if (val === "C+") {
objScores[key] = 2.5;
} else if (val === "C") {
objScores[key] = 2;
} else if (val === "D+") {
objScores[key] = 1.5;
} else if (val === "D") {
objScores[key] = 1;
} else if (val === "F") {
objScores[key] = 0;
}
}
return objScores;
}
console.log(getExamResult({
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
},['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']));
module.exports = {getExamResult}
requiredClasses 매개변수에 배열이 들어오면 requiredClasses[i]번 addArray에 key값을 할당한다.
objScores 변수에 addArray변수로 부터 할당된 key값에 value값을 0으로 주고 할당한다.
for(let i in requiredClasses){
const addArray = requiredClasses[i];
objScores[addArray] = 0;
}
scores 매개변수에 객체를 대입하면 scores의 key 값을 value 값으로 val 변수에 할당한다
할당된 값의 value 값을 objScores[key]의 value 값으로 변환하여 할당한다
ex)"A+" => 4.5
for (let key in scores) {
const val = scores[key]
if (val === "A+") {
objScores[key] = 4.5;
} else if (val === "A") {
objScores[key] = 4;
} else if (val === "B+") {
objScores[key] = 3.5;
} else if (val === "B") {
objScores[key] = 3;
} else if (val === "C+") {
objScores[key] = 2.5;
} else if (val === "C") {
objScores[key] = 2;
} else if (val === "D+") {
objScores[key] = 1.5;
} else if (val === "D") {
objScores[key] = 1;
} else if (val === "F") {
objScores[key] = 0;
}
}
return objScores;
}