[TIL]23.07.20

hyein·2023년 7월 19일
0

TIL

목록 보기
20/34
post-thumbnail

자바스크립트 es6

오늘 과제 진행 중, 설문지 문항에 대한 최빈값을 도출해서 결과데이터를 뿌려줘야했다. 먼저 문항에 대한 값은 배열로 들어 가 있었기 때문에, map을 이용해서 최빈값을 구해보았다.

Map

  • Map은 key와 value로 이루어진 자료구조이다
  • Map에서도 Set과 동일하게 순서가 중요하지 않고
  • Map에서 key는 유일한 key를 가지고 있어야 한다
  • key(key1, key2)만 다르다면 value값이 중복 가능하고(🍓) 순서는 상관없다.(어차피 key와 value가 매칭이 될 것이기 때문이다)
  • Map은 Obj와 유사하기 때문에 Map을 Obj처럼, Obj를 Map처럼 사용 할 수 있다

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을 반환해 준다.


profile
As I start to move towards the goal, the goal will start to move towards me.

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

좋은 글 잘 읽었습니다, 감사합니다.

답글 달기