프로그래머스 중복된 문자 제거 자바스크립트 | Set 객체

Chaeyeon Lee·2023년 5월 25일
0

🔅 1. 아이디어

모던 자바스크립트 딥다이브에서, Set이 중복된 객체를 허용하지 않는다는 설명을 봐서 Set을 써봤다.


🧑‍💻 2. 내 코드

function solution(my_string) {
    return [...new Set(my_string)].join('');
}

🐣 3. 개념

📌 Set

Set 객체는 자료형에 관계 없이 원시값과 객체참조 모두 '유일한 값'을 저장할 수 있다.
중복되지 않는 유일한 값들의 집합이며, 수학적 집합의 특성과 일치한다.
하나의 Set내 값은 한 번만 나타날 수 있다. 즉, 어떠한 값은 그 Set 컬렉션 내에서 유일하다.
요소순서에 의미가 없고 인덱스로 요소 접근 불가능!!!!
=>값이 같은지 검사를 수행하게 된다.

Set() : Set 객체 생성자
const set1 = new Set([1, 2, 3, 3]);
console.log(set1); // Set(3) {1, 2, 3}

const set2 = new Set('hello');
console.log(set2); // Set(4) {"h", "e", "l", "o"}

// Set을 사용한 배열의 중복 요소 제거
const uniq = array => [...new Set(array)];
console.log(uniq([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]

Set.prototype.size() : Set 객체의 요소 개수를 반환함

const { size } = new Set([1, 2, 3, 3]);
console.log(size); // 3

Set.prototype.add() : Set 객체에 요소 추가. 새로운 요소가 추가된 Set 객체 반환하므로 메서드 체이닝(메서드 연속 호출) 가능

// 요소 추가하기
const set = new Set();
console.log(set); // Set(0) {}

set.add(1);
console.log(set); // 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(2).add(2);
console.log(set); // Set(2) {1, 2}

Set.prototype.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}

// 마찬가지로 메서드 체이닝이 가능하다.
const set = new Set([1, 2, 3]);

// delete는 불리언 값을 반환한다.
set.delete(1).delete(2); // TypeError: set.delete(...).delete is not a function

Set.prototype.clear() : Set 객체의 모든 요소 일괄 삭제, 언제나 undefined 반환

const set = new Set([1, 2, 3]);

set.clear();
console.log(set); // Set(0) {}

Set.prototype.has() : 주어진 요소에 해당하는 키가 있으면 true, 없으면 false 반환
Set.prototype.values() : 주어진 Set의 각 요소의 값을 삽입 순서대로 포함하는 새로운 객체
Set.prototype.keys() : 주어진 Set의 각 요소에 대한 값을 포함하는 새로운 반복 객체(잘 안 쓰나봄?) values()의 별칭이다. Map객체와 통일성을 한 메서드인가보다.

var mySet = new Set();
mySet.add('foo');
mySet.add('bar');
mySet.add('baz');
var setIter = mySet.values();
console.log(setIter.next().value); // "foo"
console.log(setIter.next().value); // "bar"
console.log(setIter.next().value); // "baz"

📌 Set.prototype.forEach()

: 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}

// 이터러블인 Set 객체는 for...of 문으로 순회할 수 있다.
for (const value of set) {
  console.log(value); // 1 2 3
}

// 이터러블인 Set 객체는 스프레드 문법의 대상이 될 수 있다.
console.log([...set]); // [1, 2, 3]

// 이터러블인 Set 객체는 배열 디스트럭처링 할당의 대상이 될 수 있다.
const [a, ...rest] = [...set];
console.log(a, rest); // 1, [2, 3]


출처
https://wonjaetech.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Set

profile
프론트엔드 개발자 지망생

0개의 댓글