
오늘 알고리즘 문제를 풀이하면서 알았으면 좋았을 법 한 내용이 있어서 블로그에 기록해두려고 한다 !
ArraySet자바스크립트에서 Set은 클래스이므로 new 키워드와 생성자를 사용하여 객체를 생성할 수 있다.
const set = new Set() // set(0) {size:0}
위와 같이 생성자의 인자로 아무 값도 넣지 않으면 빈 세트가 생성된다.
다음은 배열을 인수로 넘기는 경우이다
const numSet = new Set([1,2,3]) // Set(3) {size:3}
세트에 값을 추가하는 경우에는 add() 메서드를 사용한다.
set.add(1); // Set(1) {1}
set.add("Z") // Set(2) {1,'Z'}
추가적으로 add() 메서드는 값을 추가한 후에 세트를 반환하기 때문에 아래와 같이 연쇄적으로 호출할 수 있다.
set.add(1).add('Z')
Set의 delete() 메서드를 사용하면 세트로 부터 특정 값을 삭제할 수 있다.
delete() 메서드에 인자로 넘기는 값이 세트에 존재하여 성공적으로 삭제한 경우 ➡️ true 반환delete() 메서드에 인자로 넘기는 값이 세트에 존재하지 않아 삭제에 실패한 경우 ➡️ false 반환set.delete(1); // true
set.delete(2); // false
세트에 특정 값이 존재하는지 확인하려면 has() 메서드를 사용한다.
if 조건문이나 3항 연산자(ternary operator)와 자주 사용된다.if(set.has(1)) {
console.log("1은 Set에 존재합니다.")
}
const result = set.has("Z") ? true : false; // true
세트의 size 속성을 통해서 해당 세트의 길이, 즉 얼마나 많은 값이 저장되어 있는지 알아낼 수 있다.
console.log(set.size) // 2
세트에 저장되어 있는 모든 값을 제거하려면 clear() 메서드를 사용한다.
set.clear() // set(0) {size:0}
세트에 저장되어 있는 모든 값을 순회하고 싶은 경우에는 for 루프문 안에서 of 연산자를 사용한다.
for (const num of numSet) {
console.log(num); // 1, 'Z'
}
또한 배열처럼 forEach() 함수를 제공하고 있기 때문에 활용할 수 있다.
numSet.forEach((num) => console.log(num));
기존에 존재하는 배열로부터 새로운 Set을 만들어야 하는 경우에는 Set() 생성자의 인자로 해당 배열이 할당된 변수를 넘겨주면 된다.
const array = [1,2,2,3,3,3];
const set = new Set(array); // set(3) {1,2,3}
대괄호 안에서 해당 Set을 상대로 전개(Spread) 연산자를 사용한다.
const array = [...set] ; // [1,2,3]
또 다른 방법으로는 Array.from() 함수를 사용하는 방법도 있다.
const array = Array.from(set); // [1,2,3]
세트는 중복 값을 허용하지 않기 때문에, 배열이나 문자열에서 중복된 값을 제거하는 데에 매우 유용하게 활용될 수 있다.
const numbers = [1,2,2,3,4,4,5]
const uniqueNumbers = [...new Set(numbers)];
// set으로 중복 값을 제거한 뒤 다시 배열로 변환
console.log(uniquenumbers); [1,2,3,4,5]
타입스크립트를 사용하는 경우에는 세트를 생성할 때 저장할 수 있는 자료형을 제한할 수 있다.
예를 들어, 다음과 같이 세트를 생성할 때 숫자형의 데이터만 저장할 수 있도록 타입 인자를 명시해주면 다른 자료형의 데이터를 추가하려고 하는 경우 타입 에러가 발생한다.
const numSet = new Set<number>();
numSet.add(1);
numSet.add("A"); //Argument of type 'string' is not assignable to parameter of type 'number'.(2345)