객체와 배열에서 사용가능한 for in 문을 먼저 알아보도록 해요.
for - in 문
배열이나 객체 전체에 반복문을 줄 때 사용하는 문법입니다.
첫 번째 방법은 아시다시피 for 구문을 이용하는 방법 입니다.
개인적인 생각으로 for 구문은 조금 더 정밀한 방법으로 반복문을 진행하는 방법이라고 생각이 됩니다. index의 숫자를 늘려 주거나 반복을 제한된 범위 안에서만 하게 만들 수 있어 정밀하게 문법을 진행할 수 있습니다.
두 번째 방법은 배열이나 객체 전체에 반복문을 줄 때 코드의 길이를 조금이나마 짧게 만들 수 있어 해석하기 좋습니다.
for (let i in arr) 은 arr이라는 배열에서 반복문을 실행하라는 것입니다.
이 for in 구문은 객체에서도 사용이 가능합니다.
이런식으로 반복문을 구현하면? i에는 obj 의 key 값을 value 값에는 obj의 value 값을 확인할 수 있습니다.
예제 문제를 보면서 object를 더 이해해볼까요
문제는 요약하자면 자신이 수강한 과목의 알파벳 성적을 숫자 성적으로 바꾸고 , 필수 과목이 수강한 과목에 포함이 되지 않으면 수강하지 않은 필수 과목을 객체에 포함시키고 0점을 부여하는 귀찮은 문제입니다.
예를 들어, 수강한 과목의 객체가
{
'글쓰기': 'C',
'영화독해': 'B',
'합창': 'B+',
'공학수학': 'D+',
'반도체 공정개론': 'C+',
'공학설계': 'A+',
}
이렇고 필수 과목은
['신소재 공정개론', '물리 화학', '재료 역학', '고체의 구조와 결함']
이렇다고 합시다.
그럼 일단 함수를 만들어서 모든 학생(모든 객체)에게 적용가능하게 만들어 볼까요?
changScore 함수안에는 빈 객체 result 그리고 Alphabet 점수와 숫자점수의 관계를 가진 객체 numberScore가 있습니다.
이 두개를 가지고 위에서 말한 for in 구문을 이용해서
value 값에는 알파벳 성적이 나오게 한 후 , 알파벳 성적을 점수로 환산하게 만들었습니다.
환산한 숫자를 수강한 과목과 상응하게 만들기 위해 새로 만든 result 객체에 추가하였습니다.
(객체 속에 내용 추가는 .... result[key값] = value 값 이렇게 하면 잘 들어갑니다.)
이제 중복되지 않은 필수 과목을 추가하여 0점을 주겠습니다.
인자를 하나 더 넣어서 for 함수를 진행하면 됩니다.
똑 같이 for in 함수를 이용해서 score 객체에 필수과목이 없다면(!) result 객체에 내용을 추가해라! 라는 내용을 담았고
함수를 실행하면 진행이 됩니다.
처음에 함수를 만들 때는 지저분하게 함수를 만들었지만 지금은 조금 더 깔끔해보이네요 ㅎㅎ
'코딩 개발 > Javascript' 카테고리의 다른 글
Web 서비스의 역사와 발전 (0) | 2022.10.23 |
---|---|
Javascript - event (0) | 2022.10.22 |
JavaScript - async 와 defer의 차이(feat.드림코딩) (0) | 2022.10.21 |
JavaScript - Class (0) | 2022.10.20 |
JavaScript - Scope (0) | 2022.10.20 |