πŸͺ„ Programming

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ Set 객체의 μ§‘ν•© μ—°μ‚° λ©”μ„œλ“œ (ꡐ집합, ν•©μ§‘ν•© λ“±)

ColorFilter 2024. 7. 4. 17:30
λ°˜μ‘ν˜•

TL;DR


πŸ’‘ ES6에 λ„μž…λœ Set κ°μ²΄λŠ” 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” κ³ μœ ν•œ 값듀을 μ €μž₯ν•˜λŠ” 데이터 ꡬ쑰닀. Set은 λ™μΌν•œ 값을 두 번 μ €μž₯ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ€‘λ³΅λœ 값을 μΆ”κ°€ν•˜λ©΄ μžλ™μœΌλ‘œ λ¬΄μ‹œν•œλ‹€. λ˜ν•œ μ‚½μž… μˆœμ„œλ₯Ό κΈ°μ–΅ν•˜κ³ , μ›μ‹œν˜•κ³Ό μ°Έμ‘°ν˜• 값을 λͺ¨λ‘ μ§€μ›ν•œλ‹€ — μ°Έκ³  ν¬μŠ€νŒ…

 

Firefox 127 버전뢀터 λ³„λ„μ˜ 폴리필 없이 크둬(Chrome)을 ν¬ν•¨ν•œ λŒ€λΆ€λΆ„μ˜ μ£Όμš” λΈŒλΌμš°μ € μ—”μ§„μ—μ„œ ꡐ집합, ν•©μ§‘ν•©, μ°¨μ§‘ν•© λ“± μ§‘ν•© 연산을 μˆ˜ν–‰ν•˜λŠ” μƒˆλ‘œμš΄ Set λ©”μ„œλ“œλ₯Ό μ§€μ›ν•œλ‹€. 크둜슀 λΈŒλΌμš°μ €μ—μ„œ μ§€μ›ν•˜λŠ” λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

  • A.intersection(B) : 두 Set이 κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜ — ꡐ집합
  • A.union(B) : 두 Set이 κ°€μ§„ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜ — ν•©μ§‘ν•©
  • A.difference(B) : A Setμ—λŠ” μžˆμ§€λ§Œ B Setμ—λŠ” μ—†λŠ” μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜ — μ°¨μ§‘ν•©
  • A.symmetricDifference(B) : 두 Set이 κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” μš”μ†Œλ₯Ό μ œμ™Έν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜ — λŒ€μΉ­ μ°¨μ§‘ν•©
  • A.isSubsetOf(B) : A Set의 λͺ¨λ“  μš”μ†Œλ₯Ό B Set이 ν¬ν•¨ν•˜λŠ”μ§€ μ—¬λΆ€ — Aκ°€ B의 λΆ€λΆ„ 집합인지 μ—¬λΆ€
  • A.isSupersetOf(B) : A Set이 B Set의 λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ”μ§€ μ—¬λΆ€ — Aκ°€ B의 μƒμœ„ 집합인지 μ—¬λΆ€
  • A.isDisjointFrom(B) : 두 Set이 곡톡 μš”μ†Œλ₯Ό κ°€μ§€μ§€ μ•ŠλŠ”μ§€ μ—¬λΆ€ — μ„œλ‘œμ†Œ μ§‘ν•© μ—¬λΆ€

 

 

A.intersection(B) | ꡐ집합


이미지 좜처 MDN

  • μ„€λͺ… : 두 Set이 κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜
  • λ°˜ν™˜κ°’ : Set
  • μˆ˜ν•™μ  ν‘œκΈ° : 𝐴∩𝐡 — A와 Bκ°€ λͺ¨λ‘ κ°€μ§€λŠ” μš”μ†Œ
  • μ°Έκ³  링크 : MDN | ν™œμš© μ˜ˆμ‹œ

 

const odds = new Set([1, 3, 5, 7, 9]);
const squares = new Set([1, 4, 9]);
console.log(odds.intersection(squares)); // Set(2) { 1, 9 }

 

 

A.union(B) | ν•©μ§‘ν•©


이미지 좜처 MDN

  • μ„€λͺ… : 두 Set이 κ°€μ§„ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜
  • λ°˜ν™˜κ°’ : Set
  • μˆ˜ν•™μ  ν‘œκΈ° : 𝐴∪𝐡 — A와 B의 λͺ¨λ“  μš”μ†Œ
  • μ°Έκ³  링크 : MDN | ν™œμš© μ˜ˆμ‹œ

 

const evens = new Set([2, 4, 6, 8]);
const squares = new Set([1, 4, 9]);
console.log(evens.union(squares)); // Set(6) { 2, 4, 6, 8, 1, 9 }

 

 

A.difference(B) | μ°¨μ§‘ν•©


이미지 좜처 MDN

  • μ„€λͺ… : A Setμ—λŠ” μžˆμ§€λ§Œ B Setμ—λŠ” μ—†λŠ” μš”μ†Œλ₯Ό ν¬ν•¨ν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜ (A Setμ—λ§Œ μžˆλŠ” μš”μ†Œ)
  • λ°˜ν™˜κ°’ : Set
  • μˆ˜ν•™μ  ν‘œκΈ° : π΄βˆ–π΅ — Aμ—μ„œ Bλ₯Ό λΊ€ μš”μ†Œ
  • μ°Έκ³  링크 : MDN | ν™œμš© μ˜ˆμ‹œ

 

const odds = new Set([1, 3, 5, 7, 9]);
const squares = new Set([1, 4, 9]);
console.log(odds.difference(squares)); // Set(3) { 3, 5, 7 }

 

 

A.symmetricDifference(B) | λŒ€μΉ­ μ°¨μ§‘ν•©


이미지 좜처 MDN

  • μ„€λͺ… : 두 Set이 κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” μš”μ†Œλ₯Ό μ œμ™Έν•œ μƒˆλ‘œμš΄ Set λ°˜ν™˜
  • λ°˜ν™˜κ°’ : Set
  • μˆ˜ν•™μ  ν‘œκΈ° : (π΄βˆ–π΅)∪(π΅βˆ–π΄) — Aμ—μ„œ Bλ₯Ό λΊ€ μš”μ†Œ + Bμ—μ„œ Aλ₯Ό λΊ€ μš”μ†Œ
  • μ°Έκ³  링크 : MDN | ν™œμš© μ˜ˆμ‹œ

 

const evens = new Set([2, 4, 6, 8]);
const squares = new Set([1, 4, 9]);
console.log(evens.symmetricDifference(squares)); // Set(5) { 2, 6, 8, 1, 9 }

 

 

A.isSubsetOf(B) | λΆ€λΆ„ μ§‘ν•©


이미지 좜처 MDN

  • μ„€λͺ… : A Set의 λͺ¨λ“  μš”μ†Œλ₯Ό B Set이 ν¬ν•¨ν•˜λŠ”μ§€ μ—¬λΆ€ (Aκ°€ B의 λΆ€λΆ„ 집합인지 μ—¬λΆ€)
  • λ°˜ν™˜κ°’ : Boolean
  • μˆ˜ν•™μ  ν‘œκΈ° : 𝐴⊆𝐡 — BλŠ” A의 λͺ¨λ“  μš”μ†Œλ₯Ό 가짐
  • μ°Έκ³  링크 : MDN

 

// foursλŠ” evens의 λΆ€λΆ„ μ§‘ν•©
const fours = new Set([4, 8, 12, 16]);
const evens = new Set([2, 4, 6, 8, 10, 12, 14, 16, 18]);
console.log(fours.isSubsetOf(evens)); // true

// oddsμ—” 2κ°€ μ—†μœΌλ―€λ‘œ primesλŠ” odds의 λΆ€λΆ„ 집합이 μ•„λ‹˜
const primes = new Set([2, 3, 5, 7, 11, 13, 17, 19]);
const odds = new Set([3, 5, 7, 9, 11, 13, 15, 17, 19]);
console.log(primes.isSubsetOf(odds)); // false

// A, B 집합이 λ™μΌν•˜λ‹€λ©΄(λ“±κ°€ μ§‘ν•©) μ„œλ‘œμ˜ λΆ€λΆ„ μ§‘ν•©
const set1 = new Set([1, 2, 3]);
const set2 = new Set([1, 2, 3]);
console.log(set1.isSubsetOf(set2)); // true
console.log(set2.isSubsetOf(set1)); // true

 

 

A.isSupersetOf(B) | μƒμœ„ μ§‘ν•©


이미지 좜처 MDN

  • μ„€λͺ… : A Set이 B Set의 λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ”μ§€ μ—¬λΆ€ (Aκ°€ B의 μƒμœ„ 집합인지 μ—¬λΆ€)
  • λ°˜ν™˜κ°’ : Boolean
  • μˆ˜ν•™μ  ν‘œκΈ° : 𝐴⊇𝐡 — AλŠ” B의 λͺ¨λ“  μš”μ†Œλ₯Ό 가짐
  • μ°Έκ³  링크 : MDN  

 

// evensλŠ” fours의 μƒμœ„ μ§‘ν•©
const evens = new Set([2, 4, 6, 8, 10, 12, 14, 16, 18]);
const fours = new Set([4, 8, 12, 16]);
console.log(evens.isSupersetOf(fours)); // true

// primesμ—” 15κ°€ μ—†μœΌλ―€λ‘œ primesλŠ” odds의 μƒμœ„ 집합이 μ•„λ‹˜
const primes = new Set([2, 3, 5, 7, 11, 13, 17, 19]);
const odds = new Set([3, 5, 7, 9, 11, 13, 15, 17, 19]);
console.log(odds.isSupersetOf(primes)); // false

// A, B 집합이 λ™μΌν•˜λ‹€λ©΄(λ“±κ°€ μ§‘ν•©) μ„œλ‘œμ˜ μƒμœ„ μ§‘ν•©
const set1 = new Set([1, 2, 3]);
const set2 = new Set([1, 2, 3]);
console.log(set1.isSupersetOf(set2)); // true
console.log(set2.isSupersetOf(set1)); // true

 

 

A.isDisjointFrom(B) | μ„œλ‘œμ†Œ


이미지 좜처 MDN

  • μ„€λͺ… : 두 Set이 곡톡 μš”μ†Œλ₯Ό κ°€μ§€μ§€ μ•ŠλŠ”μ§€ μ—¬λΆ€ (μ„œλ‘œμ†Œ μ—¬λΆ€)
  • λ°˜ν™˜κ°’ : Boolean
  • μˆ˜ν•™μ  ν‘œκΈ° : 𝐴∩𝐡=∅ — A, B 곡톡 μš”μ†Œ μ—†μŒ
  • μ°Έκ³  링크 : MDN

 

// primes, squares 곡톡 μš”μ†Œκ°€ μ—†μœΌλ―€λ‘œ μ„œλ‘œμ†Œ
const primes = new Set([2, 3, 5, 7, 11, 13, 17, 19]);
const squares = new Set([1, 4, 9, 16]);
console.log(primes.isDisjointFrom(squares)); // true

// 4, 9, 16 곡톡 μš”μ†Œλ₯Ό κ°€μ§€λ―€λ‘œ μ„œλ‘œμ†Œ μ•„λ‹˜
const composites = new Set([4, 6, 8, 9, 10, 12, 14, 15, 16, 18]);
const squares = new Set([1, 4, 9, 16]);
console.log(composites.isDisjointFrom(squares)); // false

 

 

레퍼런슀


 

New JavaScript Set methods | MDN Blog

New JavaScript Set methods are landing across browsers. Learn about sets, how you can use these methods to compare different sets, create new sets with specific properties, and more.

developer.mozilla.org

 

 


κΈ€ μˆ˜μ •μ‚¬ν•­μ€ λ…Έμ…˜ νŽ˜μ΄μ§€μ— κ°€μž₯ λΉ λ₯΄κ²Œ λ°˜μ˜λ©λ‹ˆλ‹€. 링크λ₯Ό μ°Έκ³ ν•΄ μ£Όμ„Έμš”
λ°˜μ‘ν˜•