Reference
๐๐ป ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ ๋์
Set ๊ฐ์ฒด๋ ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ๋ค์ ์งํฉ์ ๋ค๋ฃจ๋ ์๋ฃ๊ตฌ์กฐ์์. Set์ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ ์ผํ ๊ฐ๋ค์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ ์ฐจ์ด๋ ์กด์ฌํฉ๋๋ค. Set์ ์๋ฐ์คํฌ๋ฆฝํธ ES6๋ถํฐ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ผ Set์ ์ฐ๋ฉด ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์งค ์ ์๋ ์ํฉ์๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ํด์.
๋ฐฐ์ด๊ณผ Set์ ์ฐจ์ด๋ฅผ ์ดํด๋ณด์๋ฉด,
๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์์์๊ฒ ์ ์ฅํฉ๋๋ค. ์ธ๋ฑ์ค(index)๋ฅผ ํตํด์ ํน์ ์์น์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅํด์. ๊ฐ์ด ๋์ผํ๋๋ผ๋ ์ธ๋ฑ์ค๊ฐ ํ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ค๋ณต์ด ๋ฌธ์ ๋์ง ์์ ๋์ผํ ๊ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฅํ ์ ์์ต๋๋ค.
์ธํธ๋ ์ผํ ๋ณด๊ธฐ์๋ ๋ฐฐ์ด๊ณผ ๋น์ทํด๋ณด์ผ ์ ์์ง๋ง ์ฌ์ค ๊ฒฐ์ด ์์ฃผ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฐ์ ์ธํธ๋ ๋ฐ์ดํฐ๋ฅผ ์์์์ด ์ ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ์ ๊ทผํ ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธํธ๋ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. ์ฆ, ๊ธฐ์กด์ ์ธํธ์ ์๋ ๊ฐ์ ๋ ์ถ๊ฐํ๋ฉด ์๋ฌด ํจ๋ ฅ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
Set์ ํ๋ง๋๋ก ์์๊ฐ ์๋, ์ค๋ณต๋์ง ์์ ๋ฐ์ดํฐ์ ์งํฉ์ ๋๋ค.
๊ตฌ๋ถ | ๋ฐฐ์ด | Set ๊ฐ์ฒด |
๋์ผํ ๊ฐ์ ์ค๋ณตํ์ฌ ํฌํจํ ์ ์๋ค | O | X |
์์ ์์์ ์๋ฏธ๊ฐ ์๋ค | O | X |
์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผํ ์ ์๋ค | O | X |
์ด๋ฌํ Set์ ํน์ฑ์ ์ํ์ ์งํฉ์ ํน์ฑ๊ณผ ์ผ์นํฉ๋๋ค. Set์ ์ํ์ ์งํฉ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ผ์ Set์ ํตํด ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์งํฉ, ์ฌ์งํฉ ๋ฑ์ ๊ตฌํํ ์ ์์ด์.
Set ๊ฐ์ฒด์ ์์ฑ
์๋ฐ์คํฌ๋ฆฝํธ์์ Set๋ ํด๋์ค(class)์ด๋ฏ๋ก new ํค์๋์ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
const set = new Set(); // Set(0) {size: 0}
์์ ๊ฐ์ด ์์ฑ์์ ์ธ์๋ก ์๋ฌด ๊ฒ๋ ๋๊ธฐ์ง ์์ผ๋ฉด ๋น ์ธํธ๊ฐ ๋ง๋ค์ด์ง๋ฉฐ, ์๋์ ๊ฐ์ด ๋ฐฐ์ด์ ์ธ์๋ก ๋๊ธฐ๋ฉด ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ผ๋ก ์ธํธ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
const numSet = new Set([1, 2, 3]); // Set(3) {1, 2, 3}
์ด ๋, ๋ฐฐ์ด์ ์ค๋ณต๋ ๊ฐ์ด ์๋ค๋ฉด ์ค๋ณต๋ ๊ฐ์ Set ๊ฐ์ฒด์ ์์๋ก ์ ์ฅ๋์ง ์์ต๋๋ค.
์ด๋ฌํ ํน์ฑ์ ํ์ฉํด ๋ฐฐ์ด์์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
// ๊ธฐ์กด ๋ฐฐ์ด์์ filter๋ก ๋ฐฐ์ด์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ
const uniq = (array) => array.filter( (v, i, self) => self.indexOf(v) === i);
console.log(uniq([1, 1, 1, 1, 2, 2, 3]));
// Set์ผ๋ก ๋ฐฐ์ด์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ
const uniq = (array) => [...new Set(array)];
console.log(uniq([1, 1, 1, 1, 2, 2, 3]));
Set ๊ฐ์ฒด์ ์์ ๊ฐ์ ํ์ธ
const set = new Set([1, 2, 3, 5]);
console.log(set.size); // 4
์ธํธ์ size ์์ฑ์ ํตํด์ ํด๋น ์ธํธ์ ๊ธธ์ด, ์ฆ ์ผ๋ง๋ ๋ง์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋์ง๋ฅผ ์์๋ผ ์ ์์ต๋๋ค.
๊ฐ ์ถ๊ฐ
set.add(1); // Set(1) {1}
set.add("A"); // Set(2) {1, 'A'}
set.add(true); // Set(3) {1, 'A', true}
์ธํธ์ ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ ๋๋ add() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ์. ์์์ ์ค๋ช ๋๋ฆฐ ๊ฒ์ฒ๋ผ ์ธํธ์๋ ์ค๋ณต๋ ๊ฐ์ด ์ถ๊ฐ๋์ง ์์ผ๋ฉฐ, ์ ์ผํ ๊ฐ๋ง ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋ฌด์๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก add() ๋ฉ์๋๋ ๊ฐ์ ์ถ๊ฐํ ํ์ ์ธํธ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ฐ์์ ์ผ๋ก ํธ์ถํ ์๋ ์์ต๋๋ค.
set.add(1).add("A").add(true); // Set(3) {1, 'A', true}
๊ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ
if (set.has("A")) {
console.log("A๋ ์ธํธ์ ์กด์ฌํฉ๋๋ค."); // A๋ ์ธํธ์ ์กด์ฌํฉ๋๋ค.
}
const result = set.has("B") ? "YES" : "NO"; // NO
์ธํธ์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ค๋ฉด has() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ณดํต if ์กฐ๊ฑด๋ฌธ์ด๋ 3ํญ ์ฐ์ฐ์(ternary operator)์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ ์ญ์
set.delete(1); // true
set.delete(2); // false
Set์ delete() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ธํธ๋ก ๋ถํฐ ํน์ ๊ฐ์ ์ญ์ ํ ์ ์๋๋ฐ์. delete()๋ฉ์๋์ ์ธ์๋ก ๋๊ธฐ๋ ๊ฐ์ด ์ธํธ์ ์กด์ฌํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ์ญ์ ํ์๋ค๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ํด๋น ๊ฐ์ด ์ธํธ์ ์กด์ฌํ์ง ์์์ ์ญ์ ์ ์คํจํ์๋ค๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๊ฐ ์ผ๊ด ์ญ์
set.clear(); // Set(0) {size: 0}
Set ๊ฐ์ฒด์ ๋ชจ๋ ๊ฐ์ ์ ๊ฑฐํ๋ ค๋ฉด clear() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Set ๊ฐ์ฒด ์ํํ๊ธฐ
Set ๊ฐ์ฒด์ ์์๋ฅผ ์ํํ๋ ค๋ฉด forEach ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์ด์ forEach์ ์ ์ฌํ๊ฒ ์ฝ๋ฐฑ ํจ์๊ณผ forEach ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์์ this๋ก ์ฌ์ฉ๋ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํด์. ์ด ๋ ์ฝ๋ฐฑ ํจ์๋ 3๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌ๋ฐ์ต๋๋ค.
set.forEach(("ํ์ฌ ์ํ์ค์ธ ์์ ๊ฐ", "ํ์ฌ ์ํ์ค์ธ ์์ ๊ฐ", "ํ์ฌ ์ํ์ค์ธ Set ๊ฐ์ฒด ์์ฒด") => {})
์ฒซ ๋ฒ์งธ ์ธ์์ ๋ ๋ฒ์งธ ์ธ์๋ ๊ฐ์ ๊ฐ์ ๋๋ค.
์ด์ฒ๋ผ ๋์ํ๋ ์ด์ ๋ ๋ฐฐ์ด์ forEach ๋ฉ์๋์ ์ธํฐํ์ด์ค๋ฅผ ํต์ผํ๊ธฐ ์ํจ์ด๋ฉฐ ๋ค๋ฅธ์๋ฏธ๋ ์์ต๋๋ค.
๋ฐฐ์ด์ ๋ ๋ฒ์งธ ์ธ์์ ํ์ฌ ์ํ์ค์ธ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ๋ฐ์ง๋ง Set์ ์์์ ์๋ฏธ๊ฐ ์์ด ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์์ต๋๋ค.
const set = new Set([1, 2, 3, 5]);
set.forEach((v, v2, set) => console.log(v, v2, set));
Set ๊ฐ์ฒด๋ ๋ฐ๋ณต์ด ๊ฐ๋ฅํ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ for...of๋ฌธ์ผ๋ก ์ํ๋ ๊ฐ๋ฅํ๋ฉฐ, ์คํ๋ ๋ ๋ฌธ๋ฒ๊ณผ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง์ ๋์์ด ๋ ์ ๋ ์์ด์.
const set = new Set();
set.add({name: "๋๋ฌด", age: 2});
set.add({name: "ํดํผ", age: 5});
set.add({name: "๋ง๊ณ ", age: 10});
for(const value of set){
console.log('์ด๋ฆ', value.name);
console.log('๋์ด', value.age);
}
๋ฐฐ์ด์ ์ธํธ๋ก ๋ณํ
์ค์ ๋ก ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ฐฐ์ด๋ก ๋ถํฐ ์๋ก์ด ์ธํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋๋ Set() ์์ฑ์์ ์ธ์๋ก ํด๋น ๋ฐฐ์ด์ด ํ ๋น๋ ๋ณ์๋ฅผ ๋๊ธฐ๋ฉด ๋ฉ๋๋ค. ์ฃผ์ ํด์ผ ํ ์ ์ ๋ฐฐ์ด๋ก ๋ถํฐ ์ธํธ๋ฅผ ๋ง๋ค์ด๋ด๋ฉด ์ค๋ณต ๊ฐ์ด ๋ชจ๋ ์ ๊ฑฐ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ค๋ณต ๊ฐ์ ์ ์งํด์ผํ๋ ์ํฉ์์๋ ๋ฐฐ์ด์ ์ธํธ๋ก ๋ณํํ๋ ๊ฒ์ ๋ํด ๋ค์ ํ๋ฒ ์๊ฐํด๋ด์!
const array = [1, 2, 2, 3, 3, 3];
const set = new Set(array); // Set(3) {1, 2, 3}
Set ๊ฐ์ฒด๋ ์ค๋ณต๋ ์์๋ฅผ ํ์ฉํ์ง ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ์๋ก ๋ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ฐ์ด์ด๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์๋ฉ๋๋ค. Set์ด ๋ด๋ถ์ ์ผ๋ก ์ค๋ณต์ ํ๋จํ ๋, ์์๊ฐ(์ซ์, ๋ฌธ์์ด ๋ฑ)์ ๊ฐ ์์ฒด๋ฅผ ๋น๊ตํ์ง๋ง, ๊ฐ์ฒด๋ ์ฐธ์กฐ(๋ฉ๋ชจ๋ฆฌ ์์น)๋ฅผ ๋น๊ตํฉ๋๋ค. ์ฆ, ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ด์ฉ์ด๋ผ๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅ๋์ด ์์ผ๋ฉด ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๊ฐ์ฃผํฉ๋๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด ๋ฐฐ์ด์์:
const arr = [
{ nickName: "Jerry", date: '03-01' },
{ nickName: "Sena", date: '01-24' },
{ nickName: "Diana", date: '08-11' },
{ nickName: "Ahri", date: '02-26' },
{ nickName: "Ahri", date: '02-26' }, // ์ค๋ณต๋ ๊ฐ์ฒด
];
๋ค ๋ฒ์งธ ๊ฐ์ฒด์ ๋ง์ง๋ง ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ง๋ง, ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์๋ฉ๋๋ค. Set์ ์ฐธ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ผ๋ก ์ธ์ํ์ง ์๊ณ ๋ ๋ค ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ ๊ฐ์ฒด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด, ์ค๋ณต์ ์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, nickName๊ณผ date ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ ์ ์์ต๋๋ค
const newChamps = Array.from(new Set(champions.map(item => JSON.stringify(item)))).map(item => JSON.parse(item));
console.log(newChamps);
์ด ๋ฐฉ๋ฒ์ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ ํ, ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๋ฐฉ์์ ๋๋ค.
์ธํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ
๊ทธ๋ผ ๋ฐ๋๋ก ์ธํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํด์ผ ํ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊ฐ์?
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๊ดํธ ์์์ ์ธํธ๋ฅผ ์๋๋ก ์ ๊ฐ(spread) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
const set = new Set([1, 2, 3, 4]);
const array = [...set];
์ ๊ฐ ์ฐ์ฐ์๋ฅผ ๋ณ๋ก ์ ์ข์ํ์ ๋ค๋ฉด Array.from() ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
const array = Array.from(set); // [1, 2, 3]
'Language > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaSrcipt] ๋ฃจํ ์ต์ ํ๋ฅผ ํตํ ์ฑ๋ฅ ์ต์ ํ (2) | 2024.10.18 |
---|---|
[JavaScript] var, let, const ์ฐจ์ด (0) | 2023.08.29 |