[240428] 37장 Set과 Map
Set
- 중복되지 않는 유일한 값들의 집합
- 요소 순서에 의미 X
- 인덱스로 요소에 접근 X
- 수학적 집합을 구현하이 위한 자료구조
- 교집합, 합집합, 차집합, 여집합 등을 구현할 수 있음
1. Set 객체의 생성
- 이터러블을 인수로 전달 받음
const set = new Set();
console.log(set);
const set1 = new Set([1,2,3,3]);
console.log(set1); // Set(3) {1,2,3}
2. 요소 개수 확인
- size 프로퍼티 사용
3. 요소 추가
- add 메서드 사용
- 새로운 요소가 추가된 set 객체 반환해서 연속적으로 호출 가능
- NaN 객체 같다고 평가하여 중복 추가 허용 x, 0과 -0도
4. 존재 여부 확인
- has 메서드
set.has(2) // 2 있나 확인
5. 요소 삭제
- delete 메서드 사용
- 삭제 성공 여부는 boolean 으로 반환
6. 요소 일괄 삭제
- clear 메서드
7. 요소 순회
- forEach 메서드 사용
- forEach(현재 순회 중인 요소 값, 현재 순회 중인 요소 값, 현재 순회 중인 Set 객체)
- 1,2번째 인수는 같은 값인데, Array forEach 메서드와 인터페이스를 통일하기 위함임
- Set 객체는 이터러블
- for …of 순회
- 스프레드 문법 가능
- 배열 디스트럭처링 대상 가능
8. 집합 연산
교집합
Set.prototype.intersection = function (set) {
return new Set([...this].filter(v=> set.has(v)));
};
합집합
Set.prototype.union = function (set) {
return new Set([...this, ...set]);
}
차집합
Set.prototype.difference = function (set) {
return new Set([...this].filter(v=> !set.has(v)));
};
부분 집합과 상위 집합
// this가 subset의 상위 집합인지 확인한다.
Set.prototype.isSuperset = function (subset) {
const supersetArr = [...this];
return [...subset].every(v=>supersetArr.includes(v));
};
Map
- 키와 값의 쌍으로 이루어진 컬렉션이다.
- map 과 객체의 차이
구분 | 객체 | Map 객체 |
---|---|---|
키로 사용할 수 있는 값 | 문자열 또는 심벌 값 | 객체를 포함한 모든 값 |
이터러블 | X | O |
요소 개수 확인 | Object.keys(obj).length | map.size |
1. map 객체의 생성
- 이터러블을 인수로 전달 받아 Map 객체 전달
- 키와 값의 쌍으로 이루어진 요소로 구성되어야 함
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
- 중복된 키를 갖는 요소 존재 X
2. 요소 개수 확인
- size 프로퍼티
3. 요소 추가
- set 메서드 추가
map.set('key1','value1');
- 이미 존재하는 키 추가하면 덮어써짐
- NaN, -0 === 0 같다고 평가
- 키 타입에 대한 제한 없음
4. 요소 취득
- get 메서드 사용
- key 값을 전달하면 value 반환
- 없으면 undefined
5. 요소 존재 여부 확인
- has 메서드 사용
6. 요소 삭제
- delete 메서드 사용
7. 요소 일괄 삭제
- cleat 메서드 사용
8. 요소 순회
- forEach 메서드 사용
- forEach( 현재 순회 중인 요소 값, 현재 순회 중인 요소 키, map 객체 자체)
- Map 객체는 이터러블이다.
- for of 가능
- keys , values , entries 이터레이터인 객체를 반환하는 메서드 제공
Leave a comment