이 글은 ['a', 'b', 'b', 'c','c','c', 'd', 'd', 'd', 'd']와 같은 배열에서,
아래의 2가지 항목을 구하는 코드를 정리한 글이다.
1. 중복을 제거한 유니크한 항목 구하기
2. 각 요소의 출현 횟수(개수) 구하기
숫자는 물론, 문자열(string, 단어)에도 적용 가능하다.
1. 중복제거, 유니크한 항목 구하기
매개변수로 배열을 넣어 아래 함수를 호출하면, 중복을 제거한 유니크한 요소들만 배열로 반환한다.
<구현 코드>
function getUniques(array) {
return [... new Set(array)];
}
<사용 예시>
// 1. 문자열
const strings = ['a', 'b', 'b', 'c','c','c', 'd', 'd', 'd', 'd'];
getUniques(strings);
// [ 'a', 'b', 'c', 'd' ]
// 2. 숫자
const numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4];
getUniques(numbers);
// [ 1, 2, 3, 4 ]
// 3. 문자열+숫자
const mix = [2, 2, 3, 3, 3, 'a', 'b', 'b'];
getUniques(mix);
// [ 2, 3, 'a', 'b' ]
<작동 원리>
1. 배열로 Set을 생성하면서 중복 요소를 제거
2. 스프레드 문법을 통해 배열로 반환
2. 각 요소의 출현 횟수(개수) 구하기
파라미터로 배열을 넣어 아래함수를 호출하면, 각 요소별 개수 정보를 객체로 반환한다.
<구현 코드>
function getCount(array) {
return array.reduce((pv, cv)=>{
pv[cv] = (pv[cv] || 0) + 1;
return pv;
}, {});
}
<사용 예시>
// 1. 문자열
const strings = ['a', 'b', 'b', 'c','c','c', 'd', 'd', 'd', 'd'];
getCount(strings);
// { a: 1, b: 2, c: 3, d: 4 }
// 2. 숫자
const numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4];
getCount(numbers);
// { '1': 1, '2': 2, '3': 3, '4': 4 }
// 3. 문자열+숫자
const mix = [2, 2, 3, 3, 3, 'a', 'b', 'b'];
getCount(mix);
// { '2': 2, '3': 3, a: 1, b: 2 }
<작동 원리>
1. Array.prototype.reduce 메서드를 사용한다.
2. 초기값으로 빈객체 {}를 넣어준다.
3. 파라미터로 들어온 배열을 순회하면서,,,
1) 빈객체의 key 값으로 '배열의 요소'를 넣어주고
2) key에 해당하는 value에는 '배열의 요소의 갯수'를 넣어준다.
핵심은 아래 코드인데, '단축평가'를 쓴다.
pv[cv] = (pv[cv] || 0) + 1;
기존에 key로 저장된게 없다면, 0으로 세팅해주고,
기존에 key로 저장된게 있다면, 기존 value에 1을 더한다.
결과적으로 배열의 모든 요소를 순회하면서 {'요소': 갯수, '요소', 갯수, ... }를 계산해 반환한다.
(코드 구조상 중복처리도 된다.)
참고로 reduce 메서드는 '초기값'에 '배열의 요소값'을 누적하여 연산한다.
'단축평가'에 대해서는, 상세하고 쉽게 정리한 아래 글을 참고하시면 좋을듯 하다.
(참고)배열에서 최빈값을 구하고, 출현 빈도 순으로 정렬하는 방법에 대한 글
[Javascript]문자열(단어), 숫자 최빈값(mode)구하기(+빈도순 정렬) in 배열
도움이 되셨길.
'개발(Development) > JS(자바스크립트)' 카테고리의 다른 글
[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코드) (8) | 2021.03.08 |
---|---|
[Javascript]문자열(단어)/숫자 최빈값(mode)구하는 방법(+빈도순 정렬) in 배열 (0) | 2021.02.02 |
[Node.js] javascript로 python 연동 호출 오류: Module Not Found Error (0) | 2021.01.29 |
[Node.js] 자바스크립트로 파이썬 연동 실행 방법(함수 매개변수 전달 호출 : child-process) (6) | 2021.01.27 |
node.js 서버배포 후, https 리소스 요청으로 화면 깨지는 문제 해결 방법(helmet 모듈) (0) | 2021.01.25 |
댓글