셋(Set) 이란?
- 고유한 값의 모음이다.
- 맵과 동일하게 동등성 비교에 SameValueZero 알고리즘이 적용된다.
Iterable
이다.- 값을 넣은 순서대로 순회한다.
기본 메서드
add()
: 값을 추가할 때 사용한다.clear()
: 맵의 모든 엔트리를 삭제할 때 사용한다.delete()
: 하나의 엔트리를 삭제할 때 사용한다.has()
: 해당 키가 있는지 확인할 때 사용한다.get()
: 해당 키에 대응하는 value 를 얻을 때 사용한다.keys()
: 모든 키를MapIterator
형태로 얻는다.entries()
: 키 밸류를 엔트리 형태로 얻는다.forEach()
:forEach
형태로 순회한다.size
: 내부에 몇개의 값이 있는지 알려준다.
동등성 비교 확인하기
- 맵과 동일하게 동등성 비교에 SameValueZero 알고리즘이 적용된다.
const set = new Set();
set.add(+0);
set.add(-0);
console.log(set.size());
+0
과-0
을 동등하게
배열을 통해 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);
}
반응형
'자바스크립트 > 모던 자바스크립트' 카테고리의 다른 글
모던 자바스크립트, 모듈 1 - import 와 export 방식 (0) | 2023.03.26 |
---|---|
모던 자바스크립트, 위크 맵(WeakMap) 과 위크 셋(WeakSet) (0) | 2023.03.24 |
모던 자바스크립트, 맵 (Map) (0) | 2023.03.23 |
모던 자바스크립트, 4가지 동등성 비교 알고리즘 (0) | 2023.03.22 |
모던 자바스크립트, Reflect (리플렉트) 객체란? (0) | 2023.03.20 |