Search

34장 Set & Map

대분류
언어
서적
소분류
JS DeepDive
태그
Set
Map
객체
Map 터레이터
최종 편집 일시
2024/10/27 15:39
생성 일시
2024/02/08 00:17
14 more properties

Set

중복되지 않는 유일한 값들의 집합
Set객체와 배열의 차이점
구분
배열
Set 객체
동일한 값을 중복하여 포함할 수 있다.
O
X
요소 순서에 의미가 있다.
O
X
인덱스로 요소에 접근할 수 있다.
O
X

Set 객체의 생성

const set = new Set(); console.log(set); Set(0) {}
TypeScript
복사
생성자 함수로 생성되며, Set 생성자 함수는 이터러블을 인수로 전달받아 Set 객체를 생성이때 이터러블의 중복된 값을 Set 객체에 요소에 저장 X

Set.prototype

.size

요소의 개수 확인
Set.prototype.size 프로퍼티를 사용하여 확인
size 프로퍼티는 getter함수만 존재하는 접근자 프로퍼티
--> setter가 존재하지 않아 프로퍼티에 숫자를 할당하여 Set 객체의 요소 개수 변경 불가

.add

요소 추가
새로운 요소가 추가된 Set 객체를 반환하여 add뒤에 add를 연속적으로 호출 가능
const set = new Set(); set.add(1).add(2).add(2); console.log(set); // Set(2) { 1, 2 }
TypeScript
복사
===NaNNaN을 다르다고 평가하지만 SetNaNNaN을 같다고 평가
중복 추가를 허용 X, +0, -0도 마찬가지로 같다고 평가
-> NaN, +0, -0중복추가 허용 X
Set객체는 객체나 배열과 같이 모든 값을 요소로 저장 가능

.has

set.has(element: any)
TypeScript
복사
요소 존재 여부 확인
불리언 값 반환

.delete

set.delete(element: any)
TypeScript
복사
요소 삭제
boolean 값 반환
인덱스가 아닌 삭제하려는 요소 값을 인수로 전달
존재하지 않는 요소 삭제시 에러 없이 무시
add 메서드와 달리 연속적으로 호출이 불가능 (불리언 값을 반환하기 때문)

.clear

요소 일괄 삭제
언제나 undefined 반환

.forEach

요소 순회
forEach 메서드의 콜백 함수 내부에서 this로 사용될 객체를 인수로 전달하는데 이때 콜백 함수는 3개의 인수를 전달 받음
첫 번째 인수: 현재 순회중인 요소 값
두 번째 인수: 현재 순회중인 요소 값
세 번째 인수: 현재 순회중인 Set 객체 자체
Array.prototype.forEach 메서드와 인터페이스 통일하기 위해 다음과 같이 동작
Set 객체는 이터러블이기 때문에 for ... of 문으로 순회가 가능하며, 스프레드 문법과 배열 디스트럭처링의 대상이 될 수 있음
const set = new Set([1, 2, 3]); console.log(Symbol.iterator in set); // true for (const value of set) { console.log(value); // 1 2 3 } console.log([...set]); // [ 1, 2, 3 ] const [a, ...rest] = set; console.log(a, rest); // 1 [ 2, 3 ]
TypeScript
복사
Set 객체는 요소의 순서에 의미를 갖지 않지만 순회하는 순서는 요소가 추가된 순서에 따른다. --> 다른 이터러블의 순회와 호환성 유지를 위해

집합 연산

교집합 -> Set.prototype.intersection 메서드를 사용
합집함 -> Set.prototype.union 메서드를 사용
차집합 -> Set.prototype.difference 메서드를 사용
부분집합과 상위 집합 -> Set.prototype.isSuperset 메서드를 사용

Map

키와 값의 쌍으로 이루어진 컬렉션
객체와 Map 객체의 차이점
구분
객체
Map 객체
키로 사용할 수 있는 값
문자열 또는 심벌 값
객체를 포함하는 모든 값
이터러블
X
O
요소 개수 확인
Object.keys(obj).length
map.size

Map 객체의 생성

Map 생성자 함수로 생성
인수를 전달하지 않을 시 빈 Map 객체 생성
Map 생성자 함수는 이터러블을 인수로 전달받아 Map 객체를 생성
이때 인수로 전달되는 이터러블은 키와 값의 쌍으로 이루어진 요소로 구성 필요
중복된 키를 갖는 요소 존재시 값이 덮어 씌워짐 --> 중복된 키를 갖는 요소 존재 불가

.size

요소 갯수 확인
Set과 마찬가지로 getter 함수만 존재하는 접근자 프로퍼티
size 프로퍼티에 숫자를 할당하여 Map 객체의 요소 개수 변경 불가.

.set

요소 추가
새로운 요소가 추가된 Map 객체를 반환하기 때문에 연속적으로 set 메서드를 호출 가능
Set과 마찬가지로 NaN과 +0, -0을 같다고 평가하여 중복 추가를 허용 X
Map은 객체와 달리 키 타입에 제한이 없고, 객체 포함 모든 값을 키로 사용 가능 일반 객체

.get

요소 취득
인수로 전달한 키를 갖는 요소가
존재하지 않으면 undefined 반환
존재하면 전달한 키를 갖는 값을 반환

.has

요소 존재 여부 확인
불리언 값 반환

.delete

요소 삭제
불리언 값 반환

.clear

요소 일괄 삭제
undefined 반환

.forEach

요소 순회
forEach 메서드 콜백 함수는 3개의 인수를 전달 받음
첫 번째 인수: 현재 순회중인 요소 값
두 번째 인수: 현재 순회중인 요소 키
세 번째 인수: 현재 순회중인 Map 객체 자체
Map 객체는 이터러블이기 때문에 for...of, 스프레드 문법, 배열 디스트럭처링 할당의 대상이 될 수 있다.

Map 터레이터 객체 반환 메서드

Map 또한 객체를 순회하는 순서는 요소가 추가된 순서를 따른다.
→ 다른 이터러블의 순회와 호환성을 유지하기 위함

.keys

키를 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체 반환

.values

요소값을 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체 반환

.entries

요소키와 요소값을 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체 반환