개인공부/TIL(Today I Learned)

TIL 49일차_Set 객체

soon327 2021. 3. 8. 01:40

Set객체에 대해 처음알았다!🤩

Set객체는 유일한 값을 저장하는 객체이다.
즉, 하나의 Set 내부의 어떠한 값이든 그 Set 콜렉션 내에서 유일한 값이다.

또한,
Set은 객체이지만 키를 갖지 않는다.
요소값만을 갖는다!!

Set 객체를 배열로 변환하는 3가지 방법

Array.from()

const set = new Set([1, 2, 3]);

const arr = Array.from(set);

Spread Syntax

const set = new Set([1, 2, 3]);

const arr = [...set]

forEach

const set = new Set([1, 2, 3]);
const arr = [];

set.forEach((element) => {
  arr.push(element);
})

Set을 활용하는 경우들

합집합 ( 여러개의 배열을 중복없이 하나의 배열로 만들기 )

let foo = [1,2,3]
let bar = [3,4,5]

let fooBar = Array.from(new Set([...foo, ...bar]))  

주의할 점은 Set은 중복을 허용하지 않지만,
데이터타입을 구분한다는 특징이있다. 즉 1과 "1"은 다른것으로 본다.

차집합 만들기

let foo = [1,2,3]
let bar = [3,4,5]

let fooSet = new Set(foo)
fooSet.delete(...bar)

let result = Array.from(fooSet)
console.log(result)   // [1,2]

교집합 만들기

has메서드를 사용하면 된다.

let foo = [1,2,3]
let bar = [3,4,5]

let fooSet = new Set(foo)
let barSet = new Set(bar)
let result = []
fooSet.forEach(v => {
  if(barSet.has(v)){
    result.push(v)
  }
})
console.log(result)

신기한점은 forEach를 사용할 수 있다는 점이다.
배열이 아닌데도!!
찾아보니, set.prototype.forEach() 메서드가 정의되어 있던 것이었다. 😊

Set객체의 주요 속성과 메서드

속성

Set.prototype.size : 객체 내 값의 개수를 반환한다. 배열의 length처럼!

메서드

Set.prototype.add(value) : 객체에 값 추가
Set.prototype.clear() : 객체 모두 제거
Set.prototype.delete(value) : 객체에 해당 값 제거
Set.prototype.has(value) : 객체에 해당 값 있는지 boolean을 반환

참고: RE&IT, 어제오늘내일, mdn