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
복사
•
===은 NaN과 NaN을 다르다고 평가하지만 Set은 NaN과 NaN을 같다고 평가
•
중복 추가를 허용 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
•
요소키와 요소값을 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체 반환