순서가 없는 중복되지 않는 데이터의 집합
배열은 데이터의 순서를 보장하여 저장하고 동일한 값을 여러 번 저장할 수 있지만 Set은 중복된 값을 저장하지 않고 순서가 보장되지 않는다.
JavsScript에서 Set은 Class이다.
new 키워드와 생성자를 사용하여 객체를 생성한다.
const set1 = new Set(); // {}
const set2 = new Set([1, 2, 3]); // {1, 2, 3]
Set에는 유일한 값만 저장된다.
set1.add(1); // {1}
delete 메서드를 사용하여 특정 값을 삭제한다.
delete() 메서드에 인자로 넘기는 값이 세트에 존재한다면 true, 존재하지 않는다면 false를 반환한다.
set1.delete(1); // true
set1.delete(2); // false
has()
메서드를 사용하여 값을 확인한다.
const result = set1.has(1) ? "YES" : "NO"; // YES
size
프로퍼티를 통해 해당 세트의 값 개수를 확인한다.
console.log(set.size) // 1
clear()
메서드를 사용하여 Set 객체의 모든 값을 제거한다.
set.clear();
for...of 반복문을 사용하여 Set에 저장된 모든 값을 순회할 수 있다.
또한 forEach() 메서드를 사용할 수 있다.
for(const num of numSet) {
console.log(num);
}
배열을 Set으로 변환하면 중복 값이 모두 제거되므로 주의해야 한다.
const nums = [3, 1, 2, 3];
const set = new Set(nums) // {1, 2, 3}
전개 연산자 또는 Array.from()
함수를 사용하여 배열로 변환한다.
const array = [...set]; // [1, 2, 3]
const array = Array.from(set); // [1, 2, 3]
const nums = [3, 1, 2, 3];
const newNums = [... new Set(nums)];
console.log(newNums); // [1, 2, 3]
여러 개의 Set 사이의 합집합, 교집합, 차집합을 구할 수 있다.
// 합집합
const union = new Set([...set1, ...set2]);
console.log([...union]); // [1, 2, 3, 4, 5, 6, 7, 8]
// 교집합
const intersection = new Set([...set1].filter((value) => set2.has(value)));
console.log([...intersection]); // [4, 5]
// 차집합
const difference = new Set([...set1].filter((value) => !set2.has(value)));
console.log([...difference]); // [1, 2, 3]