set은 ES6에 공개된 배열과 비슷한 데이터 구조임
배열과 다른점은 중복을 허용하지 않는다
대충 아래와 같이 생성
let a = [1,2,3,4,4,5,6,6,6];
let b = new Set([1,2,3,3,4,5]);
console.log(a); //[1, 2, 3, 4, 4,5, 6, 6, 6]
console.log(b); //Set(5) { 1, 2, 3, 4, 5 }
b = new Set(a);
console.log(b); //Set(6) { 1, 2, 3, 4, 5, 6 }
추가적으로 아래와 같은 메소드들이 있다.
add 더하고
size 길이
clear 초기화
delete 인덱스넣으면 해당 번호의 요소 없애기
일듯
let a = new Set();
console.log(a) // Set(0) {}
a.add(5);
console.log(a) Set(1) {5}
console.log(a.size); 1
a.clear()
console.log(a) Set(0) {}
delete는 파라미터를 넣든 안넣은 변하지 않아서 그냥 mdn을 봄
>> 보니 인덱스가 아닌 값 자체를 파람으로 넣어줘야함
let a = new Set();
a.add(5)
a.delete(5)
console.log(a) // Set(0) {}
추가적으로 아래와 같은 메소드들이 있다. 2
- has()
- values()
let a = new Set([1,2,3,4,5]);
a.has(3) // true
a.values() // SetIterator {1, 2, 3, 4, 5}
충격적인 단점이 있었음
인덱스를 이용해 요소를 집어낼 수 없음
있는데 내가 못찾는 거일수도
set 구조를 배열로 바꾸는법
이터러블(반복가능한) 객체가 사용하는 spread연산자를 사용하여 배열로 바꿔준다.
let a = new Set([1,2,3,4,5]);
let b = [...a];
console.log(b) // [1,2,3,4,5]
Array.from을 사용하는 방법도 있지만 spread연산자를 사용하는 방법과는 달리
얕은 복사라 spread연산자를 사용함이 좋아 보인다.
weakSet
메모리 누수 방지를 위해 weakSet이란것도있음
아마 node 서버쪽에서 사용성이 더 높을거라 생각됨
(weakMap 등도 있다.)
'js > 개발' 카테고리의 다른 글
js 함수내부에서의 this 바인딩 (0) | 2022.12.03 |
---|---|
js Symbol 데이터 타입 (3) | 2022.10.17 |
js 즉시실행함수 (2) | 2022.05.31 |
js ajax로 비동기 통신하기 (0) | 2022.02.04 |
js 배열함수 (0) | 2022.01.17 |
댓글