-
JavaScript reduce()🍓𝗪𝗲𝗯/𝖩𝖺𝗏𝖺𝖲𝖼𝗋𝗂𝗉𝗍 2021. 7. 9. 21:21
제코베 자바스크립트 37번, 반장선거
새 학기를 맞아 호준이네 반은 반장 선거를 하기로 했습니다. 그런데 표를 하나씩 개표하는 과정이 너무 번거롭게 느껴진 당신은 학생들이 뽑은 후보들을 입력받으면 뽑힌 학생의 이름과 받은 표 수를 출력하는 프로그램을 작성하기로 하였습니다.
const array = prompt('이름을 입력해주세요.').split(' '); let result = {}; let winner = ""; for (let index in array) { let val = array[index]; result[val] = result[val] === undefined ? 1 : result[val] = result[val] + 1; } winner = Object.keys(result).reduce(function (a, b) { return result[a] > result[b] ? a : b });
입력
원범 원범 혜원 혜원 혜원 혜원 유진 유진
출력
혜원(이)가 총 4표로 반장이 되었습니다.
딕셔너리 형태로 이름을 key로 개수를 value로 하려고 한다.
for in 형태는 인덱스를 돌아가면서 한다.
array 배열에 있는 해당 인덱스의 값을 val에 담고, 즉 이름을 담고,
result 딕셔너리에 val을 key로 하고 result[val]을 value로 하는데,
그 값이 undefined이면 1로 하고, undefined가 아니라면 현재 value값에 1을 증가시키면서, 해당 이름이 몇 번 나왔는지 count를 센다.
Object.keys(result)를 통해 result 배열의 key들만 있는 배열에 reduce()를 사용한다.
reduce()는 빈 요소를 제외하고 배열 내에 존재하는 각 요소에 대해 callback함수를 한번씩 실행한다.
reduce함수에서 a, b를 인수로 하는데, a는 accumulator 누산기로 콜백함수의 반환값을 누적한다.
콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서, initialValue를 제공한 경우에는 initialValue값이다.
즉, 여기서는 initialValue를 제공하지 않았기 때문에, accumulator는 배열의 첫번째 값인 원범이고,
b는 currentValue로 처리할 현재 요소인데 여기서는 배열의 두번째 값인 혜원이다.
'🍓𝗪𝗲𝗯 > 𝖩𝖺𝗏𝖺𝖲𝖼𝗋𝗂𝗉𝗍' 카테고리의 다른 글
JavaScript 특정 문자 치환 방법: replaceAll 함수사용과 정규식을 사용한 replace() (0) 2021.07.10 [제코베/JavaScript] 38번 호준이의 아르바이트 (0) 2021.07.10 JavaScript 클로저 (0) 2021.07.09 JavaScript slice(), includes() 시간복잡도 (0) 2021.07.08 JavaScript indexOf(), lastIndexOf(), includes() (0) 2021.07.07