기존 블로그에 작성한 내용을 velog로 이전한 글입니다
Set 객체: 중복되지 않는 유일한 값들의 집합
Map 객체: 중복되지 않는 키, 중복 가능한 값의 쌍으로 이루어진 컬렉션
기능 | Set | Map |
---|---|---|
순서 의미 | X | X |
생성 | new Set(); | new Map(); |
개수 확인 | Set#size() | Map#size() |
요소 추가 | Set#add() (중복허용X) | Map#add() (키 중복허용X) |
요소 확인 | Set#has() | Map#has() |
요소 삭제 | Set#delete() | Map#delete() |
요소 전체삭제 | Set#clear() | Map#clear() |
요소 순회 | Set#forEach() | Map#forEach() |
다음과 같이 교집합을 구할 수 있다.
// Set 객체 받아 교집합 구하기
const getIntersection = function (set1, set2) {
let result = new Set();
for (const value of set1) {
if (set2.has(value)) result.add(value);
}
return result;
};
// 배열과 Set 객체 받아 교집합 구해서 배열로 내보내기
const getAllTypeIntersection = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);
let result = new Set();
for (const value of iter1) {
if (iter2.has(value)) result.add(value);
}
return [...result];
};
const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);
console.log(getIntersection(set1, set2)); // Set { 3, 4, 5 }
console.log(getAllTypeIntersection(set1, set2)); // [ 3, 4, 5 ]
다음과 같이 합집합을 구현할 수 있다.
// Set 객체 받아 합집합 구하기
const getUnion = function (set1, set2) {
let result = new Set(set1);
for (const value of set2) {
result.add(value);
}
return result;
};
// 배열과 Set 객체 받아 합집합 구해서 배열로 내보내기
const getAllTypeUnion = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);
let result = new Set(iter1);
for (const value of iter2) {
result.add(value);
}
return [...result];
};
const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);
console.log(getUnion(set1, set2)); // Set { 1, 2, 3, 4, 5, 6, 7 }
console.log(getAllTypeUnion(set1, set2)); // [ 1, 2, 3, 4, 5, 6, 7 ]
차집합(A-B)은 집합 A에는 존재하지만 집합 B에는 존재하지 않는 요소들의 집합이다.
// Set 객체 받아 차집합 구하기
const getDifference = function (set1, set2) {
let result = new Set(set1);
for (const value of set2) {
result.delete(value);
}
return result;
};
// 배열과 Set 객체 받아 차집합 구해서 배열로 내보내기
const getAllDifference = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);
let result = new Set(iter1);
for (const value of iter2) {
result.delete(value);
}
return [...result];
};
const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);
console.log(getDifference(set1, set2)); // Set { 1, 2 }
console.log(getAllDifference(set1, set2)); // [ 1, 2 ]
집합 A가 집합 B에 포함되는 경우(A⊆B), 집합 A는 집합 B의 부분 집합이며 집합 B는 집합 A의 상위 집합이다.
// Set 객체 받아 상위집합 여부 구하기
const getIsSuperset = function (set1, set2) {
for (const value of set2) {
if (!set1.has(value)) return false;
}
return true;
};
// 배열과 Set 객체 받아 상위집합 여부 구하기
const getAllIsSuperset = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);
for (const value of iter2) {
if (!iter1.has(value)) return false;
}
return true;
};
console.log(getIsSuperset(set1, set2)); // false
console.log(getAllIsSuperset(set1, set2)); // false