Set
은 해시테이블 자료구조를 가지고 있기 때문이다.add()
(값을 추가)delete()
(값을 삭제)has()
(값의 존재 여부)size
(값의 개수 확인)set
은 new
키워드와 생성자를 이용하여 객체를 생성할 수 있다. 또한 배열을 인자로 넘기면, 배열에 담긴 값으로 set
가 만들어진다.
const set = new Set(); // Set(0) {size: 0}
const numSet = new Set([0, 1, 2]); // Set(3) {0, 1, 2}
add()
시간 복잡도 : O(1)
add()
메소드를 사용하여 값을 추가할 수 있다. 중복값은 추가되지 않는다.
set.add(1); // Set(1) {1}
set.add("B"); // Set(2) {1, 'B'}
set.add(false); // Set(3) {1, 'B', false}
delete()
시간 복잡도 : O(1)
특정 값을 삭제하고자 할 때는 delete()
메소드를 사용하면 된다. delete 메소드의 인자값으로 삭제하고자 하는 요소를 넣어주면 된다.
true
를 반환false
를 반환set.delete(1); // true
set.delete(2); // false
has()
특정 값이 set
에 존재하는지 has()
메소드로 확인할 수 있습니다.
if (set.has("B")) {
console.log("Set에 B가 존재합니다."); // Set에 B가 존재합니다.
}
size
set
의 size
속성(메소드 아님!)을 통해 값의 개수를 확인할 수 있습니다.
console.log(set.size); // 2
clear()
clear()
메소드를 통해서 set의 모든 값을 제거할 수 있습니다.
set.clear(); // Set(0) {size: 0}
Set
의 원소들은 인덱스로 접근 불가하다. 만약 순회하고 싶다면, for … of
문을 통해 순회할 수 있다.
for (const name of nameSet) {
console.log(name);
}
// 배열처럼 forEach도 가능
nameSet.forEach((name) => console.log(name));
Set
을 생성할 때 배열을 인자로 주면 된다. 배열 안에 중복 요소가 있다면, 중복 요소를 제거해준다.
const arr = [0, 1, 1, 2, 2, 3, 3, 3];
const set = new Set(arr); // Set(3) {0, 1, 2, 3}
따라서, 배열에서 중복 값을 제거하고 싶을 때 사용하면 매우 유용하다.
const nums = [1, 2, 2, 3, 4];
const uniqueNums = [...new Set(numbers)]; // 중복 값 제거 뒤 다시 배열로
console.log(uniqueNums); // [1, 2, 3, 4]
Set를 spread 연산자(…)
를 사용하여 전개하면, 쉽게 배열로 바꿀 수 있다. Array.from()
메소드를 사용할 때는 Set를 인자로 넘겨주면 된다.
const array = [...set]; // [1, 2, 3]
const array = Array.from(set); // [1, 2, 3]