본문 바로가기
js/개발

js set 데이터 타입

by 냉면돈가스 2022. 10. 17.

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

댓글