home강의 홈으로
Section 10. 이터러블과 제너레이터
Lesson 1. Set

👉 MDN 문서 보기


중복되지 않는 값들의 집합

  • 표준 내장 객체 중 하나

💡 배열과의 차이:

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

I. 기본 사용법

// Set 생성 const set1 = new Set(); // add 메서드 - 요소 추가 set1.add(1); set1.add('A'); set1.add(true); console.log(set1); // 이미 포함된 요소는 추가하지 않음 set1.add(1); set1.add(true); console.log(set1); // 배열을 인자 넣으면 생성 + 초기화 // 중복된 요소 제거 const set2 = new Set([1, 1, 1, 'A', true]); console.log(set2); // has 메서드 - 요소 포함여부 확인 console.log( set2.has(1), set2.has('A'), set2.has(4) ); // delete 메서드 - 요소 제거 & 성공 여부 반환 console.log( set2.delete('A'), set2.delete(true), set2.delete(100) ); console.log(set2); // add 메서드는 결과 셋을 반환 const set3 = set2.add(2); console.log(set3); // 💡 메서드 체이닝을 할 수 있다는 의미 set2 .add(3) .add(4) .add(5) // 참조형이므로 둘이 같은 Set을 가리킴 console.log(set2, set3); // size 프로퍼티 - 요소의 개수 console.log( set2.size ); // keys, values, entries 메서드 - 값 / 값 / [값, 값] 반환 // key를 value와 같이 취급 console.log( set2.keys(), set2.values(), set2.entries() ); // 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); 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) console.log( objSet2 .add({ x: 1, y: 2 }) .add({ x: 1, y: 2 }) .add([1, 2, 3]) .add([1, 2, 3]) );



II. 이터러블로서의 Set

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

1. for ... of

for (item of set) { console.log(item); }

2. 스프레드 문법

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

3. 디스트럭쳐링

const [x, y] = set; console.log(x); console.log(y); const [a, b, ...rest] = set; console.log(a); console.log(b); console.log(rest);

💡 이터러블과 별개 - forEach 메서드도 사용 가능

// ⚠️ 두 번째 인자가 인덱스가 아님! // 배열과 달리 순서 개념이 없으므로... // 형식을 맞추기 위한 인자일 뿐 set.forEach(console.log); // 아래의 결과와 같음 // set.forEach((item, idx, set) => { // console.log(item, idx, set) // });

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 제대로 파는 자바스크립트 (유료 파트) 10-1

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?