JavaScript์ Set์ **์ค๋ณต์ ํ์ฉํ์ง ์๋ ๊ฐ๋ค์ ์งํฉ(Collection)**์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์
๋๋ค.
๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง ์ค๋ณต ์์, ์์ ์ ์ง, ์ธ๋ฑ์ค๋ก ์ ๊ทผ ๋ถ๊ฐ, ๋น ๋ฅธ ๊ฒ์์ด๋ผ๋ ํน์ง์ ๊ฐ์ง๋๋ค.
1๏ธโฃ Set() ๊ธฐ๋ณธ ์ ์
const mySet = new Set([1, 2, 3, 3]);
console.log(mySet);
// Set(3) {1, 2, 3}
- ์ค๋ณต๋ ๊ฐ
3์ ์๋ ์ ๊ฑฐ๋จ - ์ซ์, ๋ฌธ์์ด, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ ๋ชจ๋ ํ์ ์ ์ฅ ๊ฐ๋ฅ
2๏ธโฃ Set์ ํต์ฌ ๋ฉ์๋ (CRUD)
| ๋ฉ์๋ | ์ค๋ช | ์์ |
|---|---|---|
| add(value) | ๊ฐ ์ถ๊ฐ (์ค๋ณต ์ ๋ฌด์) | set.add(10) |
| delete(value) | ๊ฐ ์ญ์ | set.delete(10) |
| has(value) | ๊ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ | set.has(10) |
| clear() | ๋ชจ๋ ๊ฐ ์ญ์ | set.clear() |
| size (์์ฑ) | Set์ ์์ ๊ฐ์ | set.size |
๐ ์์
const s = new Set();
s.add(1);
s.add(2);
s.add(2); // ์ค๋ณต โ ๋ฌด์๋จ
console.log(s.has(2)); // true
console.log(s.size); // 2
s.delete(1);
console.log(s); // Set {2}
s.clear();
console.log(s); // Set {}
3๏ธโฃ Set ๋ฐ๋ณต(iteration) ๊ด๋ จ ๋ฉ์๋
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
| forEach(callback) | ๊ฐ ์์ ๋ฐ๋ณต ์คํ |
| keys() | key ๋ชฉ๋ก ๋ฐ๋ณต์ (Set์์๋ value์ ๋์ผ) |
| values() | value ๋ชฉ๋ก ๋ฐ๋ณต์ |
| entries() | [value, value]์ ๋ฐฐ์ด ์ ๋ฐํ |
| Symbol.iterator | for...of ๋ฐ๋ณต ์ง์ |
โถ๏ธ forEach()
const s = new Set(["a", "b", "c"]);
s.forEach((value, sameValue, set) => {
console.log(value);
});
โ ๏ธ Set์ key๊ฐ ์์ผ๋ฏ๋ก
value์ sameValue๋ ํญ์ ๋์ผํฉ๋๋ค.
โถ๏ธ keys()
const s = new Set([1, 2, 3]);
console.log([...s.keys()]);
// [1, 2, 3]
โถ๏ธ values()
console.log([...s.values()]);
// [1, 2, 3]
โถ๏ธ entries()
console.log([...s.entries()]);
// [[1,1], [2,2], [3,3]]
โถ๏ธ forโฆof (Symbol.iterator)
for (const v of s) {
console.log(v);
}
// 1
// 2
// 3
4๏ธโฃ Set์๋ ์๋ ๋ฉ์๋ (์ค์โ)
| ์กด์ฌํ์ง ์๋ ๋ฉ์๋ | ์ด์ |
|---|---|
โ map() |
๋ฐฐ์ด ์ ์ฉ |
โ filter() |
๋ฐฐ์ด ์ ์ฉ |
โ reduce() |
๋ฐฐ์ด ์ ์ฉ |
โ sort() |
์ ๋ ฌ ๋ถ๊ฐ ๊ตฌ์กฐ |
ํ์ง๋ง ์๋์ฒ๋ผ ๋ฐฐ์ด๋ก ๋ณํ ํ ์ฌ์ฉ ๊ฐ๋ฅ ๐
const s = new Set([3, 1, 2]);
const sorted = [...s].sort((a, b) => a - b);
console.log(sorted); // [1, 2, 3]
5๏ธโฃ Set์ผ๋ก ๊ตฌํํ๋ ์ค์ ์์
๐ 1) ๋ฐฐ์ด ์ค๋ณต ์ ๊ฑฐ
const arr = [1, 2, 2, 3];
const unique = [...new Set(arr)];
console.log(unique); // [1, 2, 3]
๐ 2) ๊ต์งํฉ (intersection)
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
const intersection = [...a].filter(x => b.has(x));
console.log(intersection); // [2, 3]
๐ 3) ํฉ์งํฉ (union)
const union = [...new Set([...a, ...b])];
console.log(union); // [1, 2, 3, 4]
๐ 4) ์ฐจ์งํฉ (difference)
const difference = [...a].filter(x => !b.has(x));
console.log(difference); // [1]
๐ง ์ต์ข ์ ๋ฆฌ
| ์ข ๋ฅ | ๋ฉ์๋ |
|---|---|
| ๊ธฐ๋ณธ ์กฐ์ | add, delete, has, clear, size |
| ๋ฐ๋ณต ๊ด๋ จ | forEach, keys, values, entries, Symbol.iterator |
| ์๋ ๊ฒ | map, filter, reduce, sort |
| ์์ฃผ ์ฐ๋ ํจํด | ๋ฐฐ์ด ์ค๋ณต ์ ๊ฑฐ, ํฉ์งํฉ, ๊ต์งํฉ, ์ฐจ์งํฉ |
Set์ ์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ๊ฒ์, ์งํฉ ์ฐ์ฐ์์ ์๋์ ์ผ๋ก ๊ฐ๋ ฅํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค ๐
๋ต๊ธ ๋จ๊ธฐ๊ธฐ