📌 전체 코드
const socketList = await getSocketList();
const roomList = [...new Set(socketList.map(item => item.rooms))].filter(Boolean);
>> socketList 배열 ( socketId, room, nickname 으로 구성된 요소들의 배열)
ex. socketList: [
{
_id: '683d48a69fbbc5f2c640f58b',
rooms: 'roomA',
nickname: 'nicknameA',
socketIds: []
},
{
_id: '683d4be194154f1d636e80d4',
rooms: ' roomB',
nickname: ' nicknameB',
socketIds: []
},
]
>> socketList 배열을 기반으로 각 소켓이 속한 room 목록을 중복 없이 정리한 다음, 빈 값은 제거하는 코드.
🔍 1. socketList.map(item => item.rooms)
- 각 소켓이 가지고 있는 rooms 속성만을 꺼냅니다.
예시:
const socketList = [
{ id: 1, rooms: 'room1' },
{ id: 2, rooms: 'room2' },
{ id: 3, rooms: 'room1' }, // 중복
{ id: 4, rooms: '' }, // 빈 문자열
];
이 단계 결과: ['room1', 'room2', 'room1', '']
🔍 2. new Set(...)
- Set은 JavaScript의 중복 제거 객체입니다.
new Set(['room1', 'room2', 'room1', ''])
→ Set { 'room1', 'room2', '' }
🔍 3. [...new Set(...)]
- Set은 배열이 아니므로 전개 연산자(...)를 써서 다시 배열로 변환합니다.
→ ['room1', 'room2', '']
🔍 4. .filter(Boolean)
- Boolean 생성자를 필터 함수로 사용하면 false인 값(null, undefined, 0, '', false, NaN)을 제거합니다.
→ ['room1', 'room2', ''].filter(Boolean) // → ['room1', 'room2']
✅ 최종 결과
roomList는 다음과 같이 됩니다:
→ ['room1', 'room2']
📌 요약 표
단계결과
map | 각 소켓의 rooms 목록을 뽑음 |
Set | 중복 제거 |
[...] | Set → 배열 변환 |
.filter(Boolean) | 빈 값 제거 |
'WEB' 카테고리의 다른 글
[WEB] 세 가지 웹 브라우저 간 통신 방식 비교 < postMessage, BroadcastChannel, localStorage event > (4) | 2025.07.03 |
---|---|
[JS] prototype 과 promise (4) | 2025.06.18 |
WESOCKET server adapter (0) | 2025.06.09 |
CORS 개념, 공격 시나리오 ( + XSS 와의 차이 ) (0) | 2025.06.09 |