[learning javascript] chapter 10. 맵과 셋

맵과 셋

userRoles.size; // 3

- `keys()`메서드는 맵의 키를, `values()`메서드는 값을
- `entries()`메서드는 첫 번째 요소가 키이고 두 번째 요소가 값인 배열을 각각 반환
- for...of 루프 가능
```javascript
for(let u of userRoles.keys())
    console.log(u.name);

for(let r of userRoles.values())
    console.log(r);

for(let ur of userRoles.entries())
    console.log(`${ur[0].name}: ${ur[1]}`);

// 맵도 분해(destruct) 가능
// 분해하면 좀 더 자연스러운 코드
for(let [u, r] of userRoles.entries())
    console.log(`${u.name}: ${r}`);

// entries() 메서드는 맵의 기본 이터레이터. 단축해서 사용 가능
for(let [u, r] of userRoles)
    console.log(`${u.name}: ${r}`);

위크 맵

a.setSecret(‘secret A’); b.setSecret(‘secret B’);

a.getSecret(); // “secret A” b.getSecret(); // “secret B”

- 일반적인 Map을 썼다면 가비지컬렉션에 포힘되지 않음

## 셋
- 중복을 허용하지 않는 데이터 집합
```javascript
const roles = new Set();
roles.add("User");          // Set [ "User" ]
roles.add("Admin");         // Set [ "User", "Admin" ]
roles.size;                 // 2

위크셋

const children = [ { name: “Suzy” }, { name: “Derek” }, ];

naughty.add(children[1]);

for(let child of children) { if(naughty.has(child)) console.log(Coal for ${child.name}!); else console.log(Presents for ${child.name}!); } ```