셋(Set) 이란?
기본 메서드
add(): 값을 추가할 때 사용한다.
clear(): 맵의 모든 엔트리를 삭제할 때 사용한다.
delete(): 하나의 엔트리를 삭제할 때 사용한다.
has(): 해당 키가 있는지 확인할 때 사용한다.
get(): 해당 키에 대응하는 value 를 얻을 때 사용한다.
keys(): 모든 키를 MapIterator 형태로 얻는다.
entries(): 키 밸류를 엔트리 형태로 얻는다.
forEach(): forEach 형태로 순회한다.
size: 내부에 몇개의 값이 있는지 알려준다.
동등성 비교 확인하기
const set = new Set();
set.add(+0);
set.add(-0);
console.log(set.size());
배열을 통해 Set 생성하기
const set = new Set([1, 2, 3, 1, 2, 3]);
console.log(set.size); // 3
- 배열을 통해
Set 생성이 가능하다.
Map 은 엔트리 배열을 통해 생성이 가능했다.
Set 은 중복된 원소를 넣지 않으므로 원소가 3개만 들어갔다.
- 이러한 특성을 이용해 배열에서 중복된 것을 지우고 싶다면,
Set 생성자를 이용하면 된다.
Iterable 확인하기
const set = new Set([1, 2, 3, 1, 2, 3]);
for (const e of set) {
console.log(e);
}
/*
출력결과: (값을 입력한 순서대로)
1
2
3
*/
서브 클래싱 활용해보기
class MySet extends Set {
flattenAndAdd(arr) {
if (Array.isArray(arr)) {
const flattenArr = arr.flat(Infinity);
for (const e of flattenArr) {
this.add(e);
}
return true;
}
throw new Error("it is not array");
}
}
const mySet = new MySet();
mySet.flattenAndAdd([1, 2, 3, [4, 5, [6, 7]]]);
console.log(mySet); // MySet(7) {1, 2, 3, 4, 5, …}
셋(Set) 성능은?
- 맵과 마찬가지로
O(1) 의 접근시간을 요구한다.
- 평균적으로 아래의 코드보다 빨라야 한다.
if (!array.includes(value)) {
array.push(value);
}