You need to enable JavaScript to run this app. JavaScript中如何过滤数组得到玩家参与过的房间名称列表
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何过滤数组得到玩家参与过的房间名称列表

实现方案

首先建议你先把房间数组转换成 ID 到名称的映射表,避免每次查询房间名都要遍历数组,优化查找效率,再结合 ES6 的 filter、map 方法就能轻松得到目标结构:

// 第一步:生成房间ID对应名称的映射
const roomIdToName = new Map(rooms.map(room => [room.id, room.name]));

// 第二步:生成所有玩家的参与房间列表
const playerRooms = players.map(player => {
  // 筛选当前玩家的所有房间连接记录
  const myRooms = connectedRooms
    .filter(item => item.playerId === player.id)
    // 把房间ID替换为房间名称
    .map(item => roomIdToName.get(item.roomId));
  return {
    key: player.nickname,
    value: myRooms
  }
});

// 如果只需要 BIG BOSS 对应的结果,单独筛选即可
const target = playerRooms.find(item => item.key === 'BIG BOSS');
console.log(target);
// 输出:{ key: 'BIG BOSS', value: [ 'CHICKEN WINNER', 'BURGER TIME' ] }

逻辑说明

  • 用Map做映射是典型的空间换时间操作,数据量越大相比嵌套遍历的性能优势越明显
  • 你之前的代码只拿到了房间ID,核心是少了「ID转房间名」的步骤,上面的方案通过映射表直接匹配就可以解决
  • 如果后续需要增加筛选条件(比如只保留游玩时长超过30秒的房间),直接在filter方法里加判断条件即可,拓展性更强。

内容的提问来源于stack exchange,提问作者Gamoxion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 19:06:03