ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section 10. 자바스크립트 Set
    자바스크립트 2023. 4. 6. 18:02

    Set은 표준 내장 객체 중 하나로서 중복되지 않는 값들의 집합을 말한다.

    배열과의 차이는 다음과 같다

    • 동일한 값을 여러 번 포함할 수 없다.
    • 값들의 순서가 무의미하다.

    I. 기본 사용법

    // Set 생성
    const set1 = new Set();
    
    // add 메서드 - 요소 추가
    set1.add(1);
    set1.add('A');
    set1.add(true);
    
    console.log(set1); //{1, 'A', true}

    이미 포함된 요소는 추가하지 않는다.

    set1.add(1);
    set1.add(true);
    
    console.log(set1); //{1, 'A', true}

    배열을 인자로 넣으면 생성 + 초기화를 한다. 그리고 중복된 요소가 제거가 된다.

    const set2 = new Set([1, 1, 1, 'A', true]);
    
    console.log(set2); //{1, 'A', true}

     

    has - 요소 포함여부 확인 메서드

    // has 메서드 - 요소 포함여부 확인
    console.log(
      set2.has(1),
      set2.has('A'),
      set2.has(4)
    ); //true true false

     

    delete - 요소 제거 및 성공 여부를 반환하는 메서드

    console.log(
      set2.delete('A'), //true
      set2.delete(true), //true
      set2.delete(100) //false
    );
    
    console.log(set2); //{1}

     

    add 메서드는 결과 셋을 반환한다.

    const set3 = set2.add(2);
    
    console.log(set3); //{1, 2}
    
    set2
    .add(3)
    .add(4)
    .add(5)
    
    // 참조형이므로 둘이 같은 Set을 가리킴
    console.log(set2, set3); //{1, 2, 3, 4, 5} {1, 2, 3, 4, 5}

     

    메서드 체이닝이 가능하고 참조형이므로 같은 Set을 가리킨다. 

    size 프로퍼티 - 요소의 개수를 반환한다.

    // size 프로퍼티 - 요소의 개수
    console.log(
      set2.size
    ); //5

     

    keys, values, entries - 값 / 값 / [값, 값]을 반환하는 메서드. key를 value와 같이 취급한다.

    // keys, values, entries 메서드 - 값 / 값 / [값, 값] 반환
    // key를 value와 같이 취급
    console.log(
      set2.keys(), //SetIterator {1, 2, 3, 4, 5} 
      set2.values(), //SetIterator {1, 2, 3, 4, 5} 
      set2.entries() //SetIterator {1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5}
    );

     

    clear - 모든 요소들을 삭제하는 메서드

    set2.clear();
    
    console.log(set2, set3);

    모든 요소들이 삭제가 됐다.

     

    참조형 데이터의 경우

    const objSet1 = new Set()
    .add({ x: 1, y: 2 })
    .add({ x: 1, y: 2 })
    .add([1, 2, 3])
    .add([1, 2, 3]);
    
    // 각기 다른 것으로 인식 (참조하는 주소가 다르므로)
    console.log(objSet1);

    Set은 add했을때 중복된 것은 추가가 되지 않는다. 하지만 출력문을 보니 값은 같아도 모두 add가 되어 출력된 것을 볼 수 있다. 즉, 값만 같을 뿐 서로 참조하는 주소가 다 다른 것 이라고 이해하면 된다.

    const obj = { x: 1, y: 2 };
    const arr = [1, 2, 3];
    
    const objSet2 = new Set()
    .add(obj)
    .add(obj)
    .add(arr)
    .add(arr);
    
    // 같은 것들로 인식
    console.log(objSet2)

     

    중복된 것들은 add 되지 않았다.

     

    II. 이터러블러서의 Set

    배열이랑 문자열에서 쓰는 것과 동일하다. 

     

    먼저 배열과 set을 생성했다. 

    const arr = ['A', 'B', 'C', 'D', 'E'];
    const set = new Set(arr);

     

    1. for ... of 문

    for (item of set) {
      console.log(item);
    }
    //A
    //B
    //C
    //D
    //E

    2. 스프레드 문법

    const newArr = [...set];
    
    console.log(newArr); //['A', 'B', 'C', 'D', 'E']

    또한 set은 중복을 제거하기 때문에

    // 활용 - 중복을 제거한 배열 반환
    const arr1 = [1, 1, 1, 2, 2, 3, 4, 5];
    
    const arr2 = [...new Set(arr1)];
    
    console.log(arr2); //[1, 2, 3, 4, 5]

    이런식으로도 활용이 가능하다. 

     

    3. 디스트럭쳐링

    const [x, y] = set;
    console.log(x); //A
    console.log(y); //B
    const [a, b, ...rest] = set;
    
    console.log(a); //A
    console.log(b); //B
    console.log(rest); //['C', 'D', 'E']

     

Designed by Tistory.