배열 votes에 투표 결과가 저장되어있는 상태에서
객체 voteCounter 에 득표수를 정리한다.
예를들면 votes 에 [’섭이’,’섭이’, ’섭이’, ‘구름이’, ‘구름이’, ‘구름이’] 라면
객체 voteCounter 에는 {’섭이’ : 3, ‘구름이’ :3} 이 되어야한다.
{ '행섭': 17, '양천': 23 }
// 투표 결과 리스트
let votes = [
'행섭', '행섭', '양천', '양천', '양천',
'행섭', '행섭', '양천', '양천', '행섭',
'양천', '양천', '양천', '양천', '행섭',
'행섭', '양천', '행섭', '행섭', '행섭',
'행섭', '행섭', '양천', '양천', '양천',
'양천', '양천', '행섭', '양천', '양천',
'양천', '양천', '행섭', '양천', '양천',
'양천', '행섭', '행섭', '행섭', '양천',
];
// 후보별 득표수 객체
let voteCounter = {};
// votes 배열을 이용해서 voteCounter 객체를 정리하기
for (let name of votes) {
// 후보별 득표수 출력
console.log(voteCounter);
<script>
// 투표 결과 리스트
let votes = [
'행섭', '행섭', '양천', '양천', '양천',
'행섭', '행섭', '양천', '양천', '행섭',
'양천', '양천', '양천', '양천', '행섭',
'행섭', '양천', '행섭', '행섭', '행섭',
'행섭', '행섭', '양천', '양천', '양천',
'양천', '양천', '행섭', '양천', '양천',
'양천', '양천', '행섭', '양천', '양천',
'양천', '행섭', '행섭', '행섭', '양천',
]
// 후보별 득표수 객체
let voteCounter = {};
// votes 배열을 이용해서 voteCounter 객체를 정리하기
for (let name of votes) {
if (name in voteCounter) { //voteCounter[name] === undefined;
voteCounter[name]+= 1;
} else {
voteCounter[name] = 1;
}
}
// 후보별 득표수 출력
console.log(voteCounter);
</script>
for of문을 이용해서 votes에 있는 후보 이름 순서대로 name이라는 변수에 지정됨으로써
name을 voteCounter 객체에 반영해야한다.
현재 voteCounter 객체가 처음에는 그냥 빈 객체이기 때문에
고려해야하는 경우는 두가지가 있다.
1.voteCounter[name] 프로퍼티가 없는 경우
2.voteCounter[name] 프로퍼티가 있는 경우
※프로퍼티의 존재여부를 판단하고자 할 때
- in연산자를 이용한다 (추천) => name in voteCounter
- undefined 값과 일치비교를 한다. (Notbad) => voteCounter[name] === undefined
최종적으로 이 문제는 votes에 있는 이름의 총 개수를 세야한다.
반복문 안의 조건문을 해석해보자면
if (name in voteCounter)는 즉 어떤 이름이 voteCounter에 있으면 voteCounter[name] += 1 처리
그러므로 '데셔' 라는 이름이 원래 하나가 있었다면 {'데셔':2}가 된다.
그리고 esle문은 if (name in voteCounter) 에 해당하지 않는 나머지 경우이기에
어떤 이름이 voteCounter에 없으면 실행된다.
votes의 첫번째 요소인 '행섭'을 예로들자면 현재 일단 voteCounter는 비어있는 상태에
여기서 {'행섭':0}이 맞을까 {'행섭':1}이 맞을까?
'행섭'이라는 이름이 한번 count가 되었으니 {'행섭':1}이 되는게 맞다.
즉 처음 등장하는 이름이라면 {'행섭':1}과 같이 되야하는 것이다.
이것을 else문에서 정의하는것.
if (name in voteCounter) 에서 다시말해 voteCounter에 이름이있는 경우를 가정하므로
else는 당연히 이름이 없는 경우를 가정하는 것이다.
복잡하게 생각할 필요없이 voteCounter[name] = 1 이것은 이름의 처음을 1로 카운트해주고
그 다음은 다 voteCounter[name] +=1을 타는 것.
그리고 만약 '행섭'이름이 votes에 있다면 = name in voteCounter이라면
{'행섭':1}에서 value 값에 1을 더해 {'이재식':2}를 만들어주는 것.
대충 출제자의 의도는
if문에서 ture와 false를 확인하고 else문은 최초에 voteCounter에 없다는 것으로 해서
프로퍼리에 정의하라는 문제이다......(이해하는데 1시간걸림ㅗㅗㅗ)
(in 연산자 한번 더 리뷰해보자.)