
๐Set
= ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ๋ค์ ์งํฉ
- ์ค๋ณต์ด ์๋จ
- ์์์ ์๋ฏธ๊ฐ ์์
- ์ธ๋ฑ์ค๋ก ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
Set ๊ฐ์ฒด ์์ฑ = Set ์์ฑ์ ์ฌ์ฉ
// ๋น๊ฐ์ฒด
const set = new Set()
console.log(set) // Set(0) {size: 0}
// ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ๋ฐ์
const set1 = new Set([1, 2, 3, 4])
console.log(set1) // Set(3) {1, 2, 3}
const set2 = new Set('hello')
console.log(set2) // Set(4) {'h', 'e', 'l', 'o'} ์ค๋ณต๋ l์ ํ๊ฐ๋ง ๋ค์ด๊ฐ
์ค๋ณต๋ ์์๊ฐ ์ธ์๋ก ๋ค์ด๊ฐ๋ฉด ํ๊ฐ๋ง ๋ค์ด๊ฐ -> ์ด๋ฅผ ์ด์ฉํด์ ๋ฐฐ์ด์์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
const uniq = array => [... new Set(array)]
console.log(uniq([1, 2, 2, 2, 3, 3, 4, 5])) // [1, 2, 3, 4, 5]
Set.prototype.size = ๊ฐ์ฒด์ ์์ ๊ฐ์ ํ์ธ
const {size} = new Set([1, 2, 3, 3]) // set๋ง๋ค๊ณ set.size๋ก ํด๋ ๊ฐ์ ๊ฐ
console.log(size) // 3
Set.prototype.add = ์์ ์ถ๊ฐ
const set = new Set()
set.add(1)
console.log(set) // Set(1) {1}
// ์ฐ์์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ -> add๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์
set.add(2).add(3)
console.log(set) // Set(3) {1, 2, 3}
// ์ค๋ณต๋ ์์๋ ๋ฌด์๋จ
set.add(1)
console.log(set) // Set(3) {1, 2, 3}
// NaN์ ๊ฒฝ์ฐ..
console.log(NaN === NaN) // false์ง๋ง, set์์๋ ๊ฐ๋ค๊ณ ํ๊ฐ๋จ
set.add(NaN).add(NaN) // ํ๊ฐ๋ง ๋ค์ด๊ฐ
Set.prototype.has = ์์ ์กด์ฌ ์ฌ๋ถ ํ์ธ
const set = new Set([1, 2, 3])
console.log(set.has(1)) // true
console.log(set.has(5)) // false
Set.prototype.delete = ์์ ์ญ์
์ญ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ฐํํจ
const set = new Set([1, 2, 3])
console.log(set.delete(1)) // true
console.log(set) // Set(2) {2, 3}
set.delete(5) // ๋ฌด์๋จ
set.delete(3).delete(2) // ์ฐ์์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
Set.prototype.clear = ๋ชจ๋ ์์ ์ญ์
undefined ๋ฐํ
const set = new Set([1, 2, 3])
console.log(set.clear()) // undefined
console.log(set) // Set(0) {size: 0}
Set.prototype.forEach = ์์ ์ํ
์ฝ๋ฐฑํจ์์ ์ธ์
- ์ฒซ๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ ์์๊ฐ
- ๋๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ ์์๊ฐ
- ์ธ๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ Set ๊ฐ์ฒด ์์ฒด
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}
์ฒซ๋ฒ์งธ๋ ๋๋ฒ์งธ๊ฐ ๋๊ฐ์๋ฐ ์ ๊ตณ์ด ์ด๋ ๊ฒ ๋ฐ์๊น
-> Array.prototype.forEach๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ ์ํด์.
array์ ๊ฒฝ์ฐ๋ ๋๊ฐ์ด ์ธ๊ฐ๋ฅผ ๋ฐ๋๋ฐ, ๋๋ฒ์งธ ์ธ์๊ฐ ์ํ์ค์ธ ์์์ ์ธ๋ฑ์ค์. ๊ทผ๋ฐ set๋ ์ธ๋ฑ์ค๊ฐ ์์ผ๋๊น ๊ทธ๋ฅ ์ฒซ๋ฒ์งธ ์ธ์๋ ๊ฐ์ ๊ฑธ๋ก...
Set ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ์ด๋ค.
๊ทธ๋์ for ... of๋ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ , ์คํ๋ ๋ ๋ฌธ๋ฒ๊ณผ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง๋ ๊ฐ๋ฅ
const set = new Set([1, 2, 3])
for (const v of set) {
console.log(v) // 1 2 3
}
console.log([...set]) // [1, 2, 3]
Set๋ฅผ ํ์ฉํด์ ์งํฉ ์ฐ์ฐ์ ๋ง๋ค์ด๋ณด์
(1) ๊ต์งํฉ
Set.prototype.intersection = function(set) {
return new Set([...this].filter(v => set.has(v)))
}
(2) ํฉ์งํฉ
Set.prototype.union = function (set) {
return new Set([...this, ...set])
}
(3) ์ฐจ์งํฉ
Set.prototype.difference = function (set) {
return new Set([...this].filter(v => !set.has(v))
}
๐Map
= ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ปฌ๋ ์

Map ๊ฐ์ฒด ์์ฑ = Map์์ฑ์ ์ฌ์ฉ
์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ผ๋ฉฐ, ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์์๋ก ๊ตฌ์ฑ๋์ด์ผ ํจ
// ๋น์์ ๋
const map = new Map()
console.log(map) // Map(0) {size: 0}
// ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก
const map1 = new Map([['key1', 'value1'], ['key2', 'value2']])
console.log(map1) // Map(2) {'key1' => 'value1', 'key2' => 'value2'}
const map2 = new Map([1, 2]) // TypeError: Iterator value 1 is not an entry object
// ๋ฌด์กฐ๊ฑด [['key1', 'value1'], ['key2', 'value2']] ์ด๋ฐ ํ์์ผ๋ก ๋ค์ด์์ผํ๋๋ฐ,
// ์ฌ๊ธฐ์ [1, 2]๋ก ๋ค์ด์ด. ๊ทธ๋์ 1์ ['key1', 'value1']์ ํ์์ผ๋ก ํด์ํ๋ ค๋ค๊ฐ ์คํจ
// key๊ฐ ์ค๋ณต๋๋ฉด ๋ค์ ๋ค์ด์ค๋ value๋ก ๋ฎ์ด์์์ง
const map3 = new Map([['key1', 'value1'], ['key1', 'value2']])
console.log(map3) // Map(1) {'key1' => 'value2'}
Map.prototype.size = ๊ฐฏ์ ํ์ธ
Map.prototype.set = ์์ ์ถ๊ฐ
const map = new Map()
map.set('key1', 'value1').set('key2', 'value2') // ์ฐ์ ํธ์ถ ๊ฐ๋ฅ
console.log(map) // Map(2) {'key1' => 'value1', 'key2' => 'value2'}
// ๊ฐ์ฒด๋ฅผ key๋ก ์ฐ๋๊ฒ๋ ๊ฐ๋ฅ
const user1 = { name: '์ฒ ์' }
const user2 = { name: '์ํฌ' }
const userScores = new Map()
userScores.set(user1, 90)
userScores.set(user2, 85)
console.log(userScores) // Map(2) {{name: '์ฒ ์'} => 90, {name: '์ํฌ'} => 85}
Map.prototype.get = ์์ ๊ฐ์ ธ์ค๊ธฐ
const map = new Map()
map.set('key1', 'value1').set('key2', 'value2')
console.log(map.get('key1')) // value1
console.log(map.get('key6')) // ์์ผ๋ฉด undefined
Map.prototype.has = ์กด์ฌ ์ฌ๋ถ ํ์ธ
Map.prototype.delete = ์์ ์ญ์
const map = new Map()
map.set('key1', 'value1').set('key2', 'value2')
console.log(map.delete('key1')) // true
console.log(map) // Map(1) {'key2' => 'value2'}
console.log(map.get('key6')) // ์์ผ๋ฉด undefined(๋ฌด์๋จ)
console.log(map) // Map(1) {'key2' => 'value2'}
Map.prototype.clear = ์ผ๊ด ์ญ์
Map.prototype.forEach = ์์ ์ํ
์ฝ๋ฐฑํจ์์ ์ธ์
- ์ฒซ๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ ์์๊ฐ
- ๋๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ ์์ํค
- ์ธ๋ฒ์งธ ์ธ์: ํ์ฌ ์ํ ์ค์ธ Map ๊ฐ์ฒด ์์ฒด
const fruits = new Map([
['์ฌ๊ณผ', 500],
['๋ฐ๋๋', 700],
['์ค๋ ์ง', 600]
])
fruits.forEach((value, key, map) => {
console.log(`value: ${value}`)
console.log(`key: ${key}`)
console.log(`์ ์ฒด Map:`, map)
console.log('---------------')
})
// ์ถ๋ ฅ ๊ฒฐ๊ณผ:
// value: 500
// key: ์ฌ๊ณผ
// ์ ์ฒด Map: Map(3) { '์ฌ๊ณผ' => 500, '๋ฐ๋๋' => 700, '์ค๋ ์ง' => 600 }
// ---------------
// value: 700
// key: ๋ฐ๋๋
// ์ ์ฒด Map: Map(3) { '์ฌ๊ณผ' => 500, '๋ฐ๋๋' => 700, '์ค๋ ์ง' => 600 }
// ---------------
// value: 600
// key: ์ค๋ ์ง
// ์ ์ฒด Map: Map(3) { '์ฌ๊ณผ' => 500, '๋ฐ๋๋' => 700, '์ค๋ ์ง' => 600 }
// ---------------
// ์คํ๋ ๋ ๋ฌธ๋ฒ
console.log([...fruits]) // [['์ฌ๊ณผ', 500], ['๋ฐ๋๋', 700], ['์ค๋ ์ง', 600]]
keys, values, entries ๋ฉ์๋
-> ๊ฐ์ Map ๊ฐ์ฒด์ ์์ํค, ์์๊ฐ, ์์ํค + ์์๊ฐ์ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ก ๋ฐํ
const fruits = new Map([
['์ฌ๊ณผ', 500],
['๋ฐ๋๋', 700],
['์ค๋ ์ง', 600]
])
console.log(fruits.keys()) // [Map Iterator] { '์ฌ๊ณผ', '๋ฐ๋๋', '์ค๋ ์ง' }
console.log(fruits.values()) // [Map Iterator] { 500, 700, 600 }
console.log(fruits.entries()) // [Map Entries] { [ '์ฌ๊ณผ', 500 ], [ '๋ฐ๋๋', 700 ], [ '์ค๋ ์ง', 600 ] }
'FrontEnd > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์ด๋ฒคํธ (1) | 2025.02.04 |
---|---|
[JS] ์ ๊ทํํ์ (1) | 2024.12.21 |
[Javascript] ํ๋กํ ํ์ (2) ํ๋กํ ํ์ ๊ฐ์ฒด (1) | 2024.11.10 |
[Javascript] ํ๋กํ ํ์ (1) ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์์ (0) | 2024.11.09 |
[Javascript] ์ผ๊ธ ๊ฐ์ฒด, ํจ์์ ํ๋กํผํฐ (0) | 2024.10.27 |