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) 빈 값 제거