WEB
[JS] 배열 내 특정 요소 추출 시, 중복을 제거하여 리스트 반환 const roomList = [...new Set(socketList.map(item => item.rooms))].filter(Boolean);
걍작
2025. 6. 10. 10:30
📌 전체 코드
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) | 빈 값 제거 |