객체 object 기초2

최정민·2021년 7월 10일
1

JavaScript

목록 보기
4/9
post-thumbnail

객체 순회하기

1. Object.keys() , Object.values() , Object.entries

  • Object.keys() : 어떤 객체가 가지고 있는 키들의 목록을 배열로 리턴하는 메소드
let jungmin = {
	name: "jungmin",
   	nickname:"mango",
	old:24
    }
console.log(Object.keys(jungmin))

결과 👉🏻 [ 'name', 'nickname', 'old' ]

  • Object.values() :어떤 객체가 가지고 있는 값들의 목록을 배열로 리턴하는 메소드
let jungmin = {
	name: "jungmin",
   	nickname:"mango",
	old:24
    }
console.log(Object.keys(jungmin))

결과 👉🏻 [ 'jungmin', 'mango', 24 ]

  • Object.entries() : 객체의 키와 값의 쌍으로 이루어진 길이 2짜리 배열로 이루어진, 배열을 리턴하는 메소드
let jungmin = {
	name: "jungmin",
   	nickname:"mango",
	old:24
    }
console.log(Object.keys(jungmin))

결과 👇🏻

[
  [ 'name', 'jungmin' ],
  [ 'nickname', 'mango' ],
  [ 'old', 24 ]
]

2. for-in

- 배열에서의 for-in

배열의 길이만큼 실행을 반복하는 다음과 같은 반복문과 같은 기능을 한다.
for (let i = 0; i < array.length; i ++) {}

  • for-in문의 형태.
    for (let i in array) {}

ex) for문

let hi = ['hi', '하이', '에이치아이', '안녕']
for (let i=0; i<hi.length; i++){
console.log(i);
console.log(hi[i]);
}

ex) for-in문

let hi = ['hi', '하이', '에이치아이', '안녕']
for (let i in hi){
console.log(i);
console.log(hi[i]);
}

👇🏻 둘 다 같은 결과
0
1
2
3
'hi'
'하이'
'에이치아이'
'안녕'

- 객체에서의 for in문

for-in 문의 인덱스에 해당하는 변수가 객체의 각각의 키에 해당하는 문자열을 할당받아 실행문을 (객체의 property갯수만큼)반복한다.

let jungmin = {
	name: "jungmin",
   	nickname:"mango",
	old:24
    }
for (let i in jungmin) {
  console.log(i);
  const value = jungmin[i] ;
  console.log("value: "+value) ;
}

👇🏻 결과
'name'
'nickname'
'old'
'value: jungmin'
'value: mango'
'value: 24'

예제

getExamResult 함수구현하기

  1. 인자 scores 는 다음과 같은 객체입니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.
  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}
  1. 인자 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,
    }


나의 풀이 😛
인자인 scores객체의 값들을 숫자로 mapping하는 방법을 생각하는 것이 어려웠다.

function getExamResult(scores,requiredClasses){
let mapping = {
  //특수문자(+)가 포함된문자열을 key값으로 해주기 위해 []를 사용
  //그냥 []만 사용하면 A+라는 변수를 찾아가기 때문에 ""로 감싸준다
              ["A+"]:4.5, 
                A:4,
              ["B+"]:3.5,
                B:3,
             ["C+"]:2.5,
                C:2,
            ["D+"]:1.5,
                D:1,
                F:0
               }
	let changeScore={}  
	for (let key in scores){     //영어로된 성적을 숫자로 바꾸는 것을 구현
    	changeScore[key] = mapping[scores[key]]
		}
 	for (let key in requiredClasses){    //
  	if(changeScore[requiredClasses[key]]===undefined){
    	 changeScore[requiredClasses[key]]=0;
   		}
  	}
	return changeScore;
}
console.log(getExamResult({'생활속의회계': 'C','논리적글쓰기': 'B','독일문화의이해': 'B+','기초수학': 'D+','영어회화': 'C+','인지발달심리학': 'A+'},['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']))

👇🏻 결과

{
  '생활속의회계': 2,
  '논리적글쓰기': 3,
  '독일문화의이해': 3.5,
  '기초수학': 1.5,
  '영어회화': 2.5,
  '인지발달심리학': 4.5,
  '공학수학': 0,
  '컴퓨터과학개론': 0
}
profile
나 다운 것, 가장 아름다운 것

0개의 댓글