프로그래머스 1단계 폰켓몬 문제 풀 때 Set객체를 사용했는데...
Set객체가 중복을 제거해준다는 것은 알고 있었지만 딱 거기까지만 알았을 뿐 그 이상은 몰라서 찾아봄
Set 객체는 중복되지 않는! 유일한!! 값들의 집합이다.
배열과 유사하지만 Set객체는 배열과는 다르게 중복되지 않은 값들로 이루어져 있다.
- Set 생성자 함수 이용
- 인수로는 이터러블 객체를 넣어주며, 인수를 전달하지 않으면 빈 Set객체가 생성됨
const set = new Set();
console.log(set); // Set(0) {size: 0}
const set1 = new Set([1, 2, 3, 4]);
console.log(set1); // Set(4) {1, 2, 3, 4}
const set2 = new Set("banana");
console.log(set2); // Set(3) {'b', 'a', 'n'}
// 이렇게 중복되는 a와 n은 여러 개가 저장되지 않고 한 개만 저장된다.
const uniq = array => [...new Set(array)];
// 배열의 중복 요소를 제거할 uniq 함수 만들어줌
console.log(uniq([0, 7, 0, 3, 1, 7, 6])); // [0, 7, 3, 1, 6]
// uniq 함수의 매개변수로 배열 전달 -> 중복된 요소가 제거되어 나옴
uniq함수 설명
- Set 객체 생성시, 인수로 중복 요소를 제거할 배열(array) 전달
- Spread 연산자를 사용하여 생성된 Set 객체의 요소들을 하나씩 꺼내준 뒤,
새로운 배열의 요소로 넣어줌
[... Set(5) {0, 7, 3, 1, 6}] → [0, 7, 3, 1, 6] 으로 짠! 하고 변환됨!!
- Set객체.size를 사용
- size를 이용하여 Set객체의 크기 변경 불가능
const set = new Set('apple');
console.log(set.size); // 4
// set.size = 10; (x) 잘못된 방법! 변경 불가능!
- 요소 추가
: Set객체.add(추가할 요소)
- 요소 삭제
: Set객체.delete(삭제할 요소)
→ delete 메서드는 삭제 성공시 true, 실패시 false 반환함
- 요소 일괄 삭제
: Set객체.clear()
// Set객체 생성
const set = new Set();
// 요소 추가
set.add(1);
console.log(set) // Set(1) {1}
set.add(2).add(3).add(2);
console.log(set) // Set(3) {1, 2, 3}
// 이미 있는 요소를 또 추가하면 추가되지 않음
// 요소 삭제
set.delete(2);
console.log(set); // Set(2) {1, 3}
// 요소 일괄 삭제
set.clear()
console.log(set); // Set(0) {size: 0}
- Set객체.has(확인할 요소)
const set1 = new Set('banana');
const set2 = new Set([1, 3, 7]);
console.log(set1.has('a')); // true
console.log(set2.has(5)); // false
- 여러 방법이 있지만 간단하게 for ... of 문 사용
const hello = new Set('hello');
for (const value of hello) {
console.log(value); // h e l o
}