모던 자바스크립트 Deep Dive - 37. Set과 Map

둡둡·2024년 2월 24일

Modern Javascript Deep Dive

목록 보기
38/49

37.1. Set

  • Set : 중복되지 않는 유일한 값들의 집합
  • 배열과의 차이점
    • 동일한 값을 중복하여 포함할 수 없음
    • 요소 순서 무관
    • 인덱스로 접근 불가

37.1.1. Set 객체의 생성

  • Set 생성자 함수로 생성 가능
    • 이터러블을 인수로 전달 받음
    • 인수를 전달하지 않으면 빈 Set 객체 생성
  • 중복된 값은 요소로 저장하지 않음
    • 배열에서 중복된 요소 제거 가능

37.1.2. 요소 개수 확인

  • Set.prototype.size 프로퍼티 : Set 객체의 요소 개수 확인
  • size는 getter 함수만 존재하는 접근자 프로퍼티
    • 숫자를 할당하여 요소 개수를 변경할 수 없음

37.1.3. 요소 추가

  • Set.prototype.add 메서드 : Set 객체에 요소 추가
  • 새로운 요소가 추가된 Set 객체 반환
    • 연속적으로 호출 가능
  • 중복된 요소 추가하는 경우 무시됨
    • NaN, 0과 -0은 중복으로 평가하여 추가하지 않음
  • 객체나 배열과 같은 자바스크립트의 모든 값을 요소로 저장 가능

37.1.4. 요소 존재 여부 확인

  • Set.prototype.has 메서드 : 특정 요소 존재 여부 boolean 반환

37.1.5. 요소 삭제

  • Set.prototype.delete 메서드 : 요소 삭제 후 성공 여부 boolean 반환
  • 삭제하려는 요소값 자체를 전달해야 함
    • Set 객체는 인덱스 값을 갖지 않음
  • 존재하지 않는 요소인 경우 무시됨
  • 연속적으로 호출 불가

37.1.6. 요소 일괄 삭제

  • Set.prototype.clear 메서드 : 모든 요소 일괄 삭제
  • 항상 undefined 반환

37.1.7. 요소 순회

  • Set.prototype.forEach 메서드 : 요소 순회
    • 첫 번째, 두 번째 인수: 현재 순회 중인 요소값 (동일한 값)
      • Array.forEach 와 통일성을 위함
    • 세 번째 인수: Set 객체 자체
  • Set 객체는 이터러블이므로 for...of 문, 스프레드 문법, 배열 디스트럭처링 가능

37.1.8. 집합 연산

교집합

  • 집합 A와 B의 공통 요소로 구성

합집합

  • 집합 A와 B의 중복 없는 모든 요소로 구성

차집합

  • 집합 A에는 존재하지만 B에는 존재하지 않는 요소로 구성

부분 집합과 상위 집합

  • 집합 A가 B에 포함되는 경우 A는 B의 부분 집합이며, B는 A의 상위 집합

37.2. Map

  • Map : 키와 값의 쌍으로 이루어진 컬렉션
  • 객체와의 차이점
    • 객체를 포함한 모든 값을 키로 사용할 수 있음
    • 이터러블
    • map.size로 요소 개수 확인

37.2.1. Map 객체의 생성

  • Map 생성자 함수로 생성
    • 이터러블을 인수로 전달 받음 -> 키와 값의 쌍으로 이루어진 요소
    • 인수를 전달하지 않으면 빈 Map 객체 생성
  • 전달한 이터러블에 중복된 키를 갖는 경우 덮어쓰기 됨
    • 중복된 키를 갖는 요소는 존재하지 않음

37.2.2. 요소 개수 확인

  • Map.prototype.size 프로퍼티 : 요소 개수 확인
  • getter 함수만 존재하는 접근자 프로퍼티
    • 숫자를 할당하여 객체의 요소 개수를 변경할 수 없음

37.2.3. 요소 추가

  • Map.prototype.set 메서드 : 새로운 요소를 추가한 Map 객체 반환
  • 연속적으로 호출 가능
  • 중복된 키를 갖는 요소를 추가하면 값이 덮어쓰기 됨
    • NaN, 0과 -0은 중복 요소로 평가하여 덮어쓰기 됨
  • Map 객체는 키 타입 제한 없음
    • 일반 객체는 문자열 또는 심벌 값만 가능

37.2.4. 요소 취득

  • Map.prototype.get 메서드 : 키를 인수로 전달하여 값을 반환함
  • 존재하지 않는 경우 undefined 반환

37.2.5. 요소 존재 여부 확인

  • Map.prototype.has 메서드 : 특정 요소의 존재 여부 boolean 반환

37.2.6. 요소 삭제

  • Map.prototype.delete 메서드 : 삭제 성공 여부 boolean 반환
  • 존재하지 않는 키를 전달하는 경우 무시됨
  • 연속적으로 호출 불가

37.2.7. 요소 일괄 삭제

  • Map.prototype.clear 메서드 : 요소 일괄 삭제
  • 항상 undefined 반환

37.2.8. 요소 순회

  • Map.prototype.forEach 메서드 : 객체의 요소 순회
    • 첫 번째 인수: 순회 중인 요소 값
    • 두 번째 인수: 순회 중인 요소 키
    • 세 번째 인수: 순회 중인 Map 객체 자체
  • Map 객체는 이터러블이므로 for...of 문, 스프레드 문법, 배열 디스트럭처링 가능
  • 또한 이터레이터인 객체를 반환하는 메서드 제공
    • Map.prototype.keys
    • Map.prototype.values
    • Map.prototype.entries

[출처] 모던 자바스크립트, Deep Dive

profile
괴발개발라이프

0개의 댓글