JavaScript

Set과 Map

Hun-bot 2022. 6. 30. 17:49
728x90
반응형

Set 객체는 중복되지 않는 유일한 값들의 집합이다

구분 배열 Set 객체
동일한 값을 중복하여 포함할 수 있다 O X
요소 순서에 의미가 있다 O X
인덱스로 요소에 접근할 수 있다 O X

Set은 수학적 집합을 구현하기 위한 자료구조다 ( 교집합 , 합집합등등)

Set 객체

중복은 존재불가 / 모든 값을 요소로 저장가능 / ===로 다른값도 set에서는 같다고 생각함

const set=new Set() // 빈 set 객체 생성

const set1=new Set([1,2,3,3]) // 중복된 3은 하나만 저장함
const set2=new Set(["hello"]) // "h" "e" "l" "o" 마찬가지로 중복값은 하나만

//중복 제거
const uni=arr=>[...new Set(arr)]

//요소 개수 확인
//Set.prototype.size 프로퍼티를 활용한다 (getter함수만 존재하는 접근자 프로퍼티)
//따라서 값 변경이 불가능하다
const {size}=new Set([1,2,3,4])

console.log(size); //3


// 요소 추가 Set.prototype.add 메서드를 활용
set.add(1) //제일위에 선언한 set에 1이 추가됨
set.add(2).add(3) //add 메소드는 새로운 요가 추가된 set객체를반환함 ->이런식으로 연속적 선언 가능

// 요소 순회 Set.prototype.forEach 메서드를 활용한다
// Set 객체는 이터러블이므로 for..of로 순회가능 -> 스프레드,디스트럭처링가능
인수 3개를 가지고 있고, 첫 번째 인수와 두 번째 인수는 현재 순회 중인 요소값
세 번째 인수는 현재 순회중인 Set 객체 자체를 받는다

const set=new Set([1,2,3])
set.forEach((v,v2,set))=>console.log(v,v2,set)

//집합 연산
Set.prototype.intersection=function(set){
  const result=new Set()
  //교집합
  for(const value of set){
    if(this.has(value)) result.add(value)
  }
  //for자리 대신해서
  //return new Set([...this].filter(v=>set.has(v)))
  return result
}

const setA=new Set([1,2,3,4,])
const setB=new Set([2,4])

console.log(setA.intersection(setB)); //Set(2) { 2, 4 }


  //합집합
  for(const v of set){
    result.add(v)
  }
  //for자리 대신해서
  return new Set([...this,...set])

  //차집합
  for(const mv of set){
    result.delete(mv)
  }
  //for자리 대신해서
  return new Set([...this].filter(v=>!set.has(v)))


//부분,상위집합

for(const v of set){
  //요소를 모두 포함하는가 확인
  if(!this.has(v))return false
}
return true

const supersetArr=[...this]
return [...set].every(v=>supersetArr.includes(v))

Map

Map객체는 키와 값의 쌍으로 이루어진 컬렉션이다. 객체와 유사

구분 객체 Map 객체
키로 사용할 수 있는 값 문자열 또는 심벌 값 객체를 포함한 모든 값
이터러블 O
요소 개수 확인 Object.keys(obj).length map.size

Map 생성자 함수는 이터러블을 인수로 전달받아 Map 객체를 생성한다. 이때 인수로 전달되는 이터러블은 키와 값의 쌍으로 이루어져야한다

const map=new Map() //빈 map 생성

const map1=new Map([['key1','value1'],['key2','value2']])

const map2=new Map(['key',1]) //에러

나머지 사용방법은 set과 비슷하므로 생략하겠다

728x90
반응형