오늘은 어제에 이어서 반복문의 형태 중 하나인 for in에 대해서 이해한 것을 적어놓는다.
for in의 특징은 다른 타입에는 사용할 수 없고 오로지 객체에서만 사용할 수 있는 반복문이라는 것이다.
다른 타입의 반복문은 for의 원래 용법을 사용하거나 문자열이나 배열의 경우는 for of 반복문을 사용할 수 있다.
for in을 활용하는데 있어서 먼저 객체는 키에 따라 값을 다르게 가지는 속성을 알아야 한다.
키를 이용해야 값에 갈 수 있다는 것이다. 바로 값으로 갈 수는 없고
키를 알아야 값으로 갈 수 있다.
그 키를 하나하나 꺼내서 반복해 주는 반복문이 for in 반복문이다.
예를 들어서 활용법을 살펴보면
만약 주어진 객체의 숫자중에서 최대 값을 가진 수를 찾아라 라고 한다면
function searchMaxScore(obj) {
let max;
for (let key in obj) {
if (max === undefined && typeof(obj[key]) === 'number') {
max = obj[key];
}
else if (max < obj[key] && typeof(obj[key]) === 'number') {
max = obj[key];
}
}
return max;
}
obj1 = { a: 82, b: 49, c: -2, d: 50, e: 28 f: '200'};
console.log(searchMaxScore(obj1)); // 82
이 문제에는 객체의 키에 연결되어 있는 값을 하나하나 꺼내서 모두 비교를 해야 최대값을 구할 수 있다.
모든 키에 있는 값을 봐야할 때,
또는 모든 키에 있는 값을 다 살펴보는 것이 아니라 단지 찾아야 할 때와 같이
조건에 만족하는 객체 안의 value 값에 대한 검색을 할때는 반복문을 사용하는 것이다.
모든 키 값을 하나하나 꺼내서 가져다 주기 때문이다.
여기서 for (let key in obj)의 의미는
obj 라는 입력받은 객체 안에 들어있는 키 값을 하나하나 꺼내보자라는 의미다.
여기서 let key는 변수를 선언한 것이기 때문에 아무 이름의 변수를 사용해도 된다.
여기서 반복되서 꺼내지는 obj객체의 키가 단지 선언된 이름으로 꺼내지고 있는 것 뿐이다.
반복문 안의 첫번째 조건식은 최대값을 구하려면 비교를 해야하므로 초기 값을 잡아야 한다.
그런데 초기 값을 설정할때 단지 0으로 설정한다면 안의 값들이 음수인 경우에는
초기 설정한 0이 최대 값이 될 수도 있기 때문에 max 안에 아무것도 정의되어 있지 않다면
객체의 첫번째 값을 max에 할당하라는 의미다.
그리고 조건에 &&로 연결된 것은 객체 안의 값이 숫자가 아닌 '200' 이런 경우도 있기 때문에
숫자가 아닌 값은 비교하지 말라고 타입이 숫자인 경우만 반복문을 돌린다는 의미다.
그렇게 첫번째 if 조건문에서 max에 초기 값을 할당하고 다음부터는 max에 값이 할당 되어 있기 때문에
반복하면서 두번째 else if의 조건으로만 만족하는지 비교하게 된다.
그렇게 비교하다가 max보다 큰 객체의 키 값이 나오면 그 값으로 재할당을 한다.
그렇게 끝까지 반복하면 max에는 가장 큰 값만 남게 된다.
이렇게 for in을 활용하여 객체 안의 필요한 키의 값을 찾을 수 있다.
이렇게 for of 와 for in 반복문의 이해를 적어놓았다.