DEV/└ JavaScript EX
배열 | for...of문 활용해서 투표 집계하기
devvnn
2022. 2. 2. 15:00
문제
태환이는 매년 학생회장 선거 때마다, 투표 집계 도우미 봉사를 하는데요. 작년까지는 표를 손수 세다가, 올해부터는 IT 시대에 더 적합한 솔루션을 개발하려고 합니다.
자바스크립트 배열 votes에는 학생회 투표 결과가 저장되어 있습니다. 배열 votes의 정보를 토대로, 객체 voteCounter에 후보별 득표수를 정리하는 것이 목표입니다.
예를 들어서 votes가 ['장태환', '신성순', '신성순', '장태환', '장태환']라고 가정하면, voteCounter는 {'장태환': 3, '신성순': 2}가 되어야 하는 거죠.
출력 예시
{ '이재식': 17, '이규하': 23 }
풀이 및 답
// 투표 결과 리스트
let votes = [
'이재식', '이재식', '이규하', '이규하', '이규하',
'이재식', '이재식', '이규하', '이규하', '이재식',
'이규하', '이규하', '이규하', '이규하', '이재식',
'이재식', '이규하', '이재식', '이재식', '이재식',
'이재식', '이재식', '이규하', '이규하', '이규하',
'이규하', '이규하', '이재식', '이규하', '이규하',
'이규하', '이규하', '이재식', '이규하', '이규하',
'이규하', '이재식', '이재식', '이재식', '이규하',
];
// 후보별 득표수 객체
let voteCounter = {};
//--------------------------------------------------
// for of문을 이용해서 votes에 있는 후보 이름을 순서대로 name이라는 변수에 지정되면, name을 voteCounter 객체에 반영
// 일단 voteCounter 객체가 처음에는 그냥 빈 객체이기 때문에 고려해야 되는 경우는 크게 두 가지 경우
// 1.voteCounter[name] 프로퍼티가 없는 경우
// -> 해당 후보가 첫 득표를 한 상황, 그러면 그냥 voteCounter[name] = 1
// -> voteCounter[name] === undefined OR name in voteCounter;
// 2.voteCounter[name] 프로퍼티가 있는 경우
// -> 해당 후보가 이미 최소 하나의 득표를 한 상황, 이 경우 기존 득표수에 1을 늘려 주면 됨
// -> voteCounter[name] += 1;
//--------------------------------------------------
// votes 배열을 이용해서 voteCounter 객체를 정리하기
for (let name of votes) {
// if
if(voteCounter[name] === undefined){
voteCounter[name] = 1;
}else{
voteCounter[name] += 1;
}
}
// 후보별 득표수 출력
console.log(voteCounter);