오늘 과제 진행 중, 설문지 문항에 대한 최빈값을 도출해서 결과데이터를 뿌려줘야했다. 먼저 문항에 대한 값은 배열로 들어 가 있었기 때문에, map을 이용해서 최빈값을 구해보았다.
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0)+1);
m = [...m].sort((a,b)=>b[1]-a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
let m = new Map();
console.log(m); // Map(0) {}
비어있는 map 자료구조는 이런 구조이다.
for (let n of array) m.set(n, (m.get(n) || 0)+1);
배열을 순회하면서 map에 key와 value값을 설정해준다. 이때, value값은 key 값이 있을경우 기존 key의 value값에 +1씩 더해진 값이 생성되고 그렇지 않을 경우 숫자0에 +1 한 1이 생성된다.
m = [...m].sort((a,b)=>b[1]-a[1]);
m을 스프레드 한뒤 배열로 묶어주면 우리는 map으로 얻은 결과를 배열화 함으로써 순서, 즉 인덱스를 활용할 수 있다.
또 sort를 이용하여 기존map의 value값의 크기에 대한 내림차순정렬을 할 수있다.(배열 상 각 인덱스의[1]크기 기준)
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
최종적으로 최빈값이 하나만 나왔을 때는 1을 반환해 주고 그렇지 않을 때는 -1을 반환해 준다.
좋은 글 잘 읽었습니다, 감사합니다.