# * Map & Set
Mapκ³Ό Setμ μΌλ°μ μΈ μκ³ λ¦¬μ¦μ ꡬννλλ° ν¨κ³Όμ μΌλ‘ μ¬μ©λ μ μλ μλ£κ΅¬μ‘°μ΄λ€.
- 맡μ ν€μ κ°μ μ°κ²°νλ€λ μ μμ κ°μ²΄μ λΉμ·νλ€.
- μ μ μ€λ³΅μ νμ©νμ§ μλλ€λ μ μ μ μΈ νλ©΄ λ°°μ΄κ³Ό λΉμ·νλ€.
# ES6 μ΄μ ν€μ κ°μ μ°κ²°νλλ° κ°μ²΄ μ¬μ©μ, μκΈ°λ μ¬λ¬κ°μ§ λ¨μ .
- νλ‘ν νμ μ²΄μΈ λλ¬Έμ μλνμ§ μμ μ°κ²°μ΄ μκΈΈ μ μλ€.
- κ°μ²΄ μμ μ°κ²°λ ν€μ κ°μ΄ λͺ κ°λ λλμ§ μ½κ² μμλΌ μ μλ λ°©λ²μ΄ μλ€.
- ν€λ λ°λμ λ¬Έμμ΄μ΄λ μ¬λ³Όμ΄μ΄μΌ νλ―λ‘ κ°μ²΄λ₯Ό ν€λ‘ μ¨μ κ°κ³Ό μ°κ²°ν μ μλ€.
- κ°μ²΄λ νλ‘νΌν° μμλ₯Ό μ ν 보μ₯νμ§ μλλ€.
# Map
# μμ 1)
const u1 = {name : 'Wabi'};
const u2 = {name : 'Yuna'};
const u3 = {name : 'Zinico'};
const u4 = {name : 'Yuri'};
const userRoles = new Map();
userRoles.set(u1, 'User');
userRoles.set(u2, 'User');
userRoles.set(u3, 'Admin');
//μ²΄μΈ νλ‘κ·Έλλ°λ κ°λ₯νλ€.
userRoles
.set(u1, 'User')
.set(u2, 'User')
.set(u3, 'Admin');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Note
λ©μλλ₯Ό 체μΈμΌλ‘ μ°κ²°ν μ μλ€.
# μμ 2)
const userRoles = new Map([
[u1,'User'],
[u2,'User'],
[u3,'Admin']
]);
userRoles.get(u2); // User
userRoles.has(u1); // true
userRoles.get(u1); // "User"
userRoles.has(u4); // false
userRoles.get(u4); // undefined
userRoles.get(u1); // 'User'
userRoles.set(u1, 'Admin');
userRoles.get(u1); // 'Admin'
userRoles.size; // 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Note
μμλ₯Ό μ§μΈλλ delete()
λͺ¨λ μ§μΈ λλ clear()
# WeakMap
# Mapκ³Ό μ°¨μ΄μ
- ν€λ λ°λμ κ°μ²΄μ¬μΌ νλ€.
- WeakMapμ ν€λ κ°λΉμ§ μ½λ μ μ ν¬ν¨λ μ μλ€.
- WeakMapμ μ΄ν°λ¬λΈμ΄ μλλ©° clear() λ©μλλ μλ€.
Note
κ°λΉμ§ μ½λ μ ('garbage collection')μ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ² μ€μ νλλ‘, λμ μΌλ‘ ν λΉνλ λ©λͺ¨λ¦¬ μμ μ€μμ νμμλ μμμ ν΄μ νλ κΈ°λ₯μ΄λ€.
# μμ )
const SecretHolder = (function(){
const secrets = new WeakMap();
return class {
setSecret(secret){
secrets.set(this, secret);
}
getSecret(){
return secrets.get(this);
}
}
})();
const a = new SecretHolder();
const b = new SecretHolder();
a.setSecret('secret A');
b.setSecret('secret B');
a.getSecret(); // secret A
b.getSecret(); // secret B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Set
μ€λ³΅μ νμ©νμ§ μλ λ°μ΄ν° μ§ν©
# μμ 1)
const roles = new Set();
roles.add('User'); // Set ['User']
roles.add('Admin'); // Set ['User','Admin']
roles.size; // 2
roles.add('User'); // Set ['User','Admin']
1
2
3
4
5
6
7
2
3
4
5
6
7
# μμ 2) Set, μ§ν©μ°μ°
let setA = new Set([1, 2, 3, 4, 5]);
let setB = new Set([4, 5, 6, 7, 8]);
// ν©μ§ν©
let unionSet = new Set([...setA, ...setB])
for (let value of unionSet) {
console.log(value);
}
// μ°¨λ‘λλ‘ 1, 2, 3, 4, 5, 6, 7, 8 μΆλ ₯
// κ΅μ§ν©
let intersectionSet = new Set(
[...setA].filter(v => setB.has(v))
);
for (let value of intersectionSet) {
console.log(value);
}
// μ°¨λ‘λλ‘ 4, 5 μΆλ ₯
// μ°¨μ§ν©
let differenceSet = new Set(
[...setA].filter(v => !setB.has(v))
);
for (let value of differenceSet) {
console.log(value);
}
// μ°¨λ‘λλ‘ 1, 2, 3 μΆλ ₯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# WeakSet
WeakMap κ³Ό λ§μ°¬κ°μ§λ‘ μ΄ν°λ¬λΈμ΄ μλκ³ , κ°λΉμ§ μ½λ μ
μ λμμ΄ λλ€.
μ°μ΄λ μ©λλ‘λ κ°μ²΄κ° μ
μμ μ‘΄μ¬νλμ§ μλμ§ μ²΄ν¬ μ©λλ‘ κ±°μ μ°μΈλ€.
# μμ 1)
const naughty = new WeakSet();
const children = [
{name : 'Wabi'},
{name : 'Yuna'}
];
naughty.add(children[1]);
for(let child of children){
if(naughty.has(child)){
console.log(`This child ${child.name} is naughty`);
}else{
console.log(`This child ${child.name} is kind and good`);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16