# Set Data 다루기
# JS set data
Set 객체는 값 콜렉션으로, 삽입 순서대로 요소를 순회할 수 있습니다. 하나의 Set 내 값은 한 번만 나타날 수 있습니다. 즉, 어떤 값은 그 Set 콜렉션 내에서 유일합니다.
Set은 JS에서 배열을 다루는 것과 비슷한 방식으로 다룰 수 있습니다. 내부의 요소를 순회하며 처리하는 map, forEach사용할 수 있다. 다만, filter, sort, reduce등의 고차함수는 사용이 불가능 하다.
# method
Set은 다음과 같은 메서드를 가지고 있다.
# add
해당 요소를 set에 추가하는 메서드
let set = new Set([1, 2, 3, 4]);
set.add(5); // set {1, 2, 3, 4, 5}
# has
해당 요소가 set안에 존재하는지 확인하는 메서드
let set = new Set([1,2,3,4)
set.has(2) // true
set.has(5) // false
# clear
Set data를 비우는 메서드
let set = new Set([1, 2, 3, 4]);
set.clear(); // set {}
# size
메서드가 아닌 property이지만 Array와 다르게 Set에 존재하는 property로 여기에 추가 했습니다. 해당 property는 Set Data의 크기를 알 수 있다.
let set = new Set([1, 2, 3, 4]);
set.size; // 4
# Set Data handles
Set을 이용한 데이터 만들기 예제
집합의 형식을 하고있는 Set을 이용해 중복데이터나 교차 데이터를 처리하는데 사용할 수 있다.
# 교집합
두 집합의 공통된 원소를 찾아내는 방법
const A = new Set([1, 2, 3, 4]);
const B = new Set([2, 4, 5]);
function interSectionSet(setA, setB) {
const interSet = new Set();
setB.forEach((el) => {
if (setA.has(el)) interSet.add(el);
});
return interSet;
}
console.log(interSectionSet(A, B));
# 합집합
두 집합의 모든 원소를 가지고 있는 집합
const A = new Set([1, 2, 3, 4]);
const B = new Set([2, 4, 5]);
function unionSet(setA, setB) {
const union = new Set(setA);
setB.forEach((el) => {
union.add(el);
});
return union;
}
console.log(unionSet(A, B));
# 차집합
기준 집합에서의 두 집합의 공통된 원소를 제외한 원소의 집합
const A = new Set([1, 2, 3, 4]);
const B = new Set([2, 4, 5]);
function diffSet(setA, setB) {
const diff = new Set(setA);
setB.forEach((el) => {
diff.delete(el);
});
return diff;
}
console.log(diffSet(A, B));
# 부분집합
기준 집합에 완전한 부분집합인지 확인하는 경우
const A = new Set([1, 2, 3, 4]);
const B = new Set([2, 4, 5]);
const C = new Set([1, 2]);
function isSubSet(setA, setB) {
let flag = true;
setB.forEach((el) => {
if (!setA.has(el)) flag = false;
});
return flag;
}
console.log(isSubSet(A, B)); // false
console.log(isSubSet(A, C)); // true