[JS] Set 자료형

그릿 Grit·2025년 3월 18일
0

javascript

목록 보기
1/1
post-thumbnail

배열과의 차이점

  • 인덱스로 접근 불가
  • 중복 원소 없음
  • 특정 값을 삭제하거나 값이 있는지 확인할 때 배열보다 빠르게 연산 가능 → Set해시테이블 자료구조를 가지고 있기 때문이다.

Set의 중요 메소드와 속성

  • add() (값을 추가)
  • delete() (값을 삭제)
  • has() (값의 존재 여부)
  • size (값의 개수 확인)

Set 생성

setnew 키워드와 생성자를 이용하여 객체를 생성할 수 있다. 또한 배열을 인자로 넘기면, 배열에 담긴 값으로 set가 만들어진다.

const set = new Set(); // Set(0) {size: 0}

const numSet = new Set([0, 1, 2]); // Set(3) {0, 1, 2}

값 추가: add()

시간 복잡도 : O(1)

add() 메소드를 사용하여 값을 추가할 수 있다. 중복값은 추가되지 않는다.

set.add(1); // Set(1) {1}
set.add("B"); // Set(2) {1, 'B'}
set.add(false); // Set(3) {1, 'B', false}

값 삭제: delete()

시간 복잡도 : O(1)

특정 값을 삭제하고자 할 때는 delete() 메소드를 사용하면 된다. delete 메소드의 인자값으로 삭제하고자 하는 요소를 넣어주면 된다.

  • 값이 있어서 성공적으로 삭제했다면, true를 반환
  • 값이 없어서 삭제에 실패했다면, false를 반환
set.delete(1); // true
set.delete(2); // false

값 존재 여부 확인: has()

특정 값이 set에 존재하는지 has() 메소드로 확인할 수 있습니다.

if (set.has("B")) {
  console.log("Set에 B가 존재합니다."); // Set에 B가 존재합니다.
}

값 개수 확인: size

setsize 속성(메소드 아님!)을 통해 값의 개수를 확인할 수 있습니다.

console.log(set.size); // 2

모든 값 제거: clear()

clear() 메소드를 통해서 set의 모든 값을 제거할 수 있습니다.

set.clear(); // Set(0) {size: 0}

Set 순회

Set의 원소들은 인덱스로 접근 불가하다. 만약 순회하고 싶다면, for … of 문을 통해 순회할 수 있다.

for (const name of nameSet) {
  console.log(name);
}

// 배열처럼 forEach도 가능
nameSet.forEach((name) => console.log(name));

배열 ↔ Set 변환

배열 → Set

Set을 생성할 때 배열을 인자로 주면 된다. 배열 안에 중복 요소가 있다면, 중복 요소를 제거해준다.

const arr = [0, 1, 1, 2, 2, 3, 3, 3];
const set = new Set(arr); // Set(3) {0, 1, 2, 3}

따라서, 배열에서 중복 값을 제거하고 싶을 때 사용하면 매우 유용하다.

const nums = [1, 2, 2, 3, 4];
const uniqueNums = [...new Set(numbers)]; // 중복 값 제거 뒤 다시 배열로
console.log(uniqueNums); // [1, 2, 3, 4]

Set → 배열

Set를 spread 연산자(…)를 사용하여 전개하면, 쉽게 배열로 바꿀 수 있다. Array.from() 메소드를 사용할 때는 Set를 인자로 넘겨주면 된다.

const array = [...set]; // [1, 2, 3]

const array = Array.from(set); // [1, 2, 3]

레퍼런스

profile
𝙒𝙝𝙚𝙧𝙚 𝙩𝙝𝙚𝙧𝙚 𝙞𝙨 𝙖 𝙬𝙞𝙡𝙡 𝙩𝙝𝙚𝙧𝙚 𝙞𝙨 𝙖 𝙬𝙖𝙮 ✨

0개의 댓글