๐ง 37.1 Set
Set ๊ฐ์ฒด๋ ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ๋ค์ ์งํฉ.
Set ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ์ฐจ์ด๊ฐ ์๋ค.
<๋ฐฐ์ด์ ๋์ง๋ง Set์ ์๋๋ ํน์ง>
- ๋์ผํ ๊ฐ์ ์ค๋ณตํ์ฌ ํฌํจํ ์ ์๋ค.
- ์์ ์์์ ์๋ฏธ๊ฐ ์๋ค.
- ์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผํ ์ ์๋ค.
set ์ ์ํ์ ์งํฉ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ค.
set ์ ํตํด ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์งํฉ, ์ฌ์งํฉ ๋ฑ์ ๊ตฌํํ ์ ์๋ค.
37.1.1 Set ๊ฐ์ฒด์ ์์ฑ
const set = new Set();
Set ์์ฑ์ ํจ์๋ก ์์ฑ.
์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋น Set ๊ฐ์ฒด๊ฐ ์์ฑ๋จ.
Set ์์ฑ์ ํจ์๋ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ Set ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ด๋ ์ดํฐ๋ฌ๋ธ์ ์ค๋ณต๋ ๊ฐ์ Set ๊ฐ์ฒด์ ์์๋ก ์ ์ฅ๋์ง ์์.
const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1) //Set(6) { 1, 2, 3, 4, 5, 6 }
๋ฐฐ์ด์ ์ค๋ณต ์์ ์ ๊ฑฐ ํ ๋ ํ์ฉํ ์ ์๋ค.
const uniq = [...new Set([1, 2, 3, 4, 5, 5, 5, 6])];
console.log(uniq);
//[ 1, 2, 3, 4, 5, 6 ]
37.1.2 ์์ ๊ฐ์ ํ์ธ - Set.prototype.size()
const uniq = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(uniq.size); //6
์ฌ์ด์ฆ๋ฅผ ์์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
37.1.3 ์์ ์ถ๊ฐ - Set.prototype.add()
const uniq = new Set([1, 2, 3, 3, 3]);
console.log(uniq.add(5));
set.add ๋ฅผ ์ฌ์ฉํจ.
์ค๋ณต๋ ๊ฐ์ ๋ฌด์ํ๊ณ ์ถ๊ฐ๋๋ค. (๋ฐ๋ก ์๋ฌ๊ฐ ๋์ง ์์)
NaN ๊ณผ NaN ์ ๋ค๋ฅด๋ค๊ณ ํ๊ฐํ์ง๋ง Set ์์๋ ์ค๋ณต ์ถ๊ฐ๊ฐ ๋์ง ์๋๋ค.
0๊ณผ -0์ ๊ฐ๋ค๊ณ ํ๊ฐํด์ ์ค๋ณต ์ถ๊ฐ ํ์ฉ ์๋จ.
console.log(NaN === NaN); //false
console.log(0 === -0); //true
const set = new Set();
set.add(NaN).add(NaN);
set.add(0).add(-0);
console.log(set); //Set(2) { NaN, 0 }
Set ๊ฐ์ฒด๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ด JS ์ ๋ชจ๋ ๊ฐ์ ์์๋ก ์ ์ฅํ ์ ์๋ค.
37.1.4 ์์ ์กด์ฌ ์ฌ๋ถ ํ์ธ - Set.prototype.has()
const set = new Set([1, 2, 3]);
console.log(set.has(2)) //true
console.log(set.has(4)) //false
37.1.5 ์์ ์ญ์ - Set.prototype.delete()
const set = new Set([1, 2, 3]);
set.delete(2);
console.log(set); // Set(2) { 1, 3 }
์กด์ฌํ์ง ์๋ ์์๋ฅผ ์ญ์ ํ๋ ค ํ๋ฉด ์๋ฌ ์์ด ๋ฌด์๋จ.
delete ๋ฉ์๋๋ ์ญ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ boolean ์ผ๋ก ๋ฐํํ๋ค.
=> add().add() ์ด๋ ๊ฒ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ ๊ฒ์ฒ๋ผ delete().delete() ์ด๋ ๊ฒ ์ฌ์ฉํ ์ โ
37.1.6 ์์ ์ผ๊ด ์ญ์ - Set.prototype.clear()
const set = new Set([1, 2, 3]);
set.clear();
console.log(set); //Set(0) {}
37.1.7 ์์ ์ํ
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 }
1, 2๋ฒ ์งธ ์์๋ ๊ฐ์ ๊ฐ์ธ๋ฐ, forEach ๋ฉ์๋์ ์ธํฐํ์ด์ค๋ฅผ ํต์ผํ๊ธฐ ์ํจ์ด๋ฉฐ ๋ค๋ฅธ ์๋ฏธ๋ ์๋ค.
Set ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ => for...of ๋ฌธ์ผ๋ก ์ํ ๊ฐ๋ฅ & ์คํ๋ ๋ ๋ฌธ๋ฒ๊ณผ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง์ ๋์์ด ๋ ์๋ ์๋ค.
37.1.8 ์งํฉ ์ฐ์ฐ
๊ต์งํฉ, ํฉ์งํฉ ๋ฑ => array ๋ก ๋ฐ๊ฟ์ ์ํ๋ ๊ฐ์ผ๋ก ๊ฑธ๋ฌ๋
๐ง 37.2 Map
Map ์ ๊ฐ์ฒด์ ํค์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ปฌ๋ ์ .
๊ฐ์ฒด์ ์ ์ฌํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค.
๊ตฌ๋ถ | ๊ฐ์ฒด | Map ๊ฐ์ฒด |
ํค๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ | ๋ฌธ์์ด ๋๋ ์ฌ๋ฒ ๊ฐ | ๊ฐ์ฒด๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ |
์ดํฐ๋ฌ๋ธ | X | O |
์์ ๊ฐ์ ํ์ธ | Object.keys(obj).length | map.size |
37.2.1 Map ๊ฐ์ฒด์ ์์ฑ
Map ์์ฑ์ ํจ์๋ก ์์ฑํจ.
์ธ์๋ก ์ ๋ฌ๋๋ ์ดํฐ๋ฌ๋ธ์ ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์์๋ก ๊ตฌ์ฑ๋์ด์ผํจ.
const map = new Map();
console.log(map); //Map(0) {}
const map1 = new Map([['a', 'hello'], ['b', 'hi']])
console.log(map1); //Map(2) { 'a' => 'hello', 'b' => 'hi' }
์ค๋ณต๋ ํค๋ฅผ ๊ฐ๋ ์์๊ฐ ์กด์ฌํ๋ฉด ๊ฐ์ด ๋ฎ์ด์จ์ง๋ค.
37.2.2 ์์ ๊ฐ์ ํ์ธ - Map.prototype.size()
const map = new Map([['a', 'hello'], ['b', 'hi']])
console.log(map.size); //2
size ๋ก Map ๊ฐ์ฒด ์์์ ๊ฐ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
37.2.3 ์์ ์ถ๊ฐ - Map.prototype.set()
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye')
console.log(map); //Map(3) { 'a' => 'hello', 'b' => 'hi', 'c' => 'bye' }
์๋ก ์ถ๊ฐ๋ Map ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ set ๋ฉ์๋๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ ์ ์๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye')
console.log(map.set("d", "lalalal"));
//Map(4) { 'a' => 'hello', 'b' => 'hi', 'c' => 'bye', 'd' => 'lalalal' }
Set๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก NaN๊ณผ NaN, 0๊ณผ -0 ์ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค.
Map ๊ฐ์ฒด๋ ํค ํ์ ์ ์ ํ์ด ์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ์ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
(์ผ๋ฐ ๊ฐ์ฒด์ ๊ฐ์ฅ ๋๋๋ฌ์ง๋ ์ฐจ์ด์ ์ด๋ค)
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye')
console.log(map.set({ A: "A!!" }, "lalalal"));
/**Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
} */
37.2.4 ์์ ์ทจ๋ - Map.prototype.get()
์ธ์๋ก ํค๋ฅผ ์ ๋ฌ -> ๊ฐ์ ๋ฐํ
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye').set({ A: "A!!" }, "lalalal");
console.log(map.get("c")) //bye
37.2.5 ์์ ์กด์ฌ ์ฌ๋ถ ํ์ธ - Map.prototype.has()
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye').set({ A: "A!!" }, "lalalal");
console.log(map.has("a")) //true
37.2.6 ์์ ์ญ์ - Map.prototype.delete()
ํค ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
map.set("c", 'bye').set({ A: "A!!" }, "lalalal");
map.delete({ A: "A!!" });
console.log(map)
//
Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
}
๊ฐ์ฒด๊ฐ key ์ธ ๊ฒฝ์ฐ, ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฃ์ผ๋ฉด ์ ํ ์ญ์ ๊ฐ ๋์ง ์๋๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
const key1 = { A: "A!!" };
map.set("c", 'bye').set(key1, "lalalal");
map.delete(key1);
console.log(map);
//Map(3) { 'a' => 'hello', 'b' => 'hi', 'c' => 'bye' }
๊ฐ์ฒด์ธ key ๋ฅผ ๋ฐ๋ก ๋ณ์๋ก ํ ๋นํด์ค ๋ค,
์ญ์ ์ ๋ณ์๋ฅผ ์ ์ด์ฃผ๋ฉด ์ญ์ ๊ฐ ๋๋ค.
37.2.7 ์์ ์ผ๊ด ์ญ์ - Map.prototype.clear()
์ธ์ ๋ undefined ๋ฅผ ๋ฐํํ๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
const key1 = { A: "A!!" };
map.set("c", 'bye').set(key1, "lalalal");
console.log(map.clear()); //undefined
37.2.7 ์์ ์ํ
forEach ์ฌ์ฉ ๊ฐ๋ฅ.
์ธ์๋ ๊ฐ, ํค, Map ๊ฐ์ฒด ์์ด๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
const key1 = { A: "A!!" };
map.set("c", 'bye').set(key1, "lalalal");
map.forEach((value, key, map) => console.log(value, key, map));
//
hello a Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
}
hi b Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
}
bye c Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
}
lalalal { A: 'A!!' } Map(4) {
'a' => 'hello',
'b' => 'hi',
'c' => 'bye',
{ A: 'A!!' } => 'lalalal'
}
์ดํฐ๋ฌ๋ธ์ด๋ผ for... of ๋ฌธ์ผ๋ก๋ ์ํํ ์ ์๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
const key1 = { A: "A!!" };
map.set("c", 'bye').set(key1, "lalalal");
for (const item of map) {
console.log(item)
}
//
[ 'a', 'hello' ]
[ 'b', 'hi' ]
[ 'c', 'bye' ]
[ { A: 'A!!' }, 'lalalal' ]
Map ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ๋์์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ.
() ๋ฅผ ๋ถ์ฌ์ค์ผ ์ ์ ์๋ํ๋ค.
const map = new Map([['a', 'hello'], ['b', 'hi']])
const key1 = { A: "A!!" };
map.set("c", 'bye').set(key1, "lalalal");
console.log(map.keys());
console.log(map.values());
console.log(map.entries());
//
[Map Iterator] { 'a', 'b', 'c', { A: 'A!!' } }
[Map Iterator] { 'hello', 'hi', 'bye', 'lalalal' }
[Map Entries] {
[ 'a', 'hello' ],
[ 'b', 'hi' ],
[ 'c', 'bye' ],
[ { A: 'A!!' }, 'lalalal' ]
}
'๋ ์ ๋ชฉ๋ก > ๋ชจ๋ฅ๋ค Modern JS Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ฅ๋ค] 36์ฅ ๋์คํธ๋ญ์ฒ๋ง ํ ๋น (0) | 2023.06.04 |
---|---|
[๋ชจ๋ฅ๋ค] 35์ฅ ์คํ๋ ๋ ๋ฌธ๋ฒ (0) | 2023.06.02 |
[๋ชจ๋ฅ๋ค] 34์ฅ ์ดํฐ๋ฌ๋ธ (0) | 2023.06.01 |
[๋ชจ๋ฅ๋ค] 32์ฅ String (0) | 2023.05.29 |
[๋ชจ๋ฅ๋ค] 31์ฅ RegExp (0) | 2023.05.27 |