본문 바로가기

스터디/[모던 자바스크립트 deep dive] JS

#37. Set과 Map

1. Set 

Set 객체 : 중복되지 않는 유일한 값들의 집합 ( 수학적 집합을 구현하기 위한 자료구조 )

1. Set 객체의 생성

  • Set 생성자 함수로 생성
    • 이터러블을 인수로 전달받아 Set 객체 생성
    • 이터러블의 중복된 값은 Set 객체에 요소로 저장 X
const set1 = new Set([1,2,3,3]); // Set(3){1,2,3}

2. 요소 개수 확인

  • Set.prototype.size 프로퍼티를 사용한다.
const {size} = new Set([1,2,3,3]) // 3

3. 요소 추가

  • Set.prototype.add 메서드를 사용한다.
const set = new Set(); // Set(O) {}
set.add(1); // Set(1) {1}

const set = new Set(); 
set.add(1).add(2); 
console.log(set); // Set(2) {1, 2} 

const set = new Set(); 
set 
.add(1) 
.add( 'a' ) 
.add(true) 
.add(undefined) 
.add(nulL) 
.add({}) 
.add([]) 
.add(() => {}); 
console.log(set); // Set(8) {1, "a", true, undefined, null, {}, [], ()) => {}}

4. 요소 존재 여부 확인

  • Set.prototype.has 메서드를 사용한다. (boolean값 반환)
const set = new Set([1,2,3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false

5. 요소 삭제

  • Set.prototype.delete 메서드를 사용한다.  (boolean값 반환)
    • delete 메서드에는 인덱스가 아니라 삭제하려는 요소값을 인수로 전달해야 한다. (Set 객체는 순서에 의미가 없음)
const set = new Set([1, 2, 3]); 

// 요소 2를 삭제힌다.
set.delete(2); 
console.log(set); // Set(2) {1, 3}

// 요소 1을 삭제힌다. 
set.delete(1); 
console.log(set); // Set(1) {3}

6. 요소 일괄 삭제

  • Set.prototype.clear 메서드를 사용한다. 
const set = new Set([1,2,3]);
set.clear();
console.log(set); // Set(O) {}

7. 요소 순회

  • Set.prototype.forEach 메서드를 사용한다.
    첫 번째 인수 : 현재 순회 중인 요소값
    두 번째 인수 : 현재 순회 중인 요소값 
    세 번째 인수 : 현재 순회 중인 Set 객체 자체
    • 첫 번째 인수와 두 번째 인수는 같은 값인데, 이처럼 동작하는 이유는 Array.prototype.forEach 메서드와 인터페이스를 통일하기 위함이며 다른 의미는 없다.
const set = new Set([1,2,3]);
set.forEach((v,v2,set) => console.log(v,v2,set));
/* 
1 1 Set(3) {1, 2, 3}
2 2 Set(3) {1, 2, 3}
3 3 Set(3) {1, 2, 3} 
*/