You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何从现有数组随机取值生成两人组队新数组

JS实现玩家随机2人组队方案

你现有的随机抽取、移除已选玩家的逻辑已经跑通核心流程,只需要补充数组层级的存储逻辑即可,具体实现步骤:

  • 函数内先初始化存储所有队伍的总结果数组,初始为空
  • 外层每轮循环(对应生成1支队伍)启动时,新建一个存储当前队伍成员的空子数组
  • 抽到玩家后直接推入当前队伍的子数组,凑满2人就把当前子数组推入总结果数组即可

另外原有逻辑可以做两处优化,避免冗余操作、防止污染原始数据:

  • 不要直接修改原players数组,进入函数先做浅拷贝生成待选玩家池
  • 随机抽取时直接生成数组索引,用splice一次性完成「取玩家+从待选池移除」的操作,不需要额外写while循环做重复删除

完整可运行代码如下:

const players = ['name1','name2','name3','name4','name5','name6','name7','name8'];

function createTeams(playerList) {
  // 浅拷贝原数组,不修改原始数据源
  const pendingPlayers = [...playerList];
  const teamCount = pendingPlayers.length / 2;
  // 存储最终所有队伍的结果数组
  const allTeams = [];

  for (let i = 0; i < teamCount; i++) {
    // 初始化当前队伍的空数组
    const currentTeam = [];
    for (let x = 0; x < 2; x++) {
      // 生成待选池范围内的随机索引
      const randomIndex = Math.floor(Math.random() * pendingPlayers.length);
      // 取出对应玩家,同时从待选池移除
      const selectedPlayer = pendingPlayers.splice(randomIndex, 1)[0];
      console.log('Selected Player will be added to a team: ', selectedPlayer);
      // 将选中玩家加入当前队伍
      currentTeam.push(selectedPlayer);
    }
    // 当前队伍凑齐2人,加入总结果列表
    allTeams.push(currentTeam);
  }

  return allTeams;
}

// 调用示例
const resultTeams = createTeams(players);
console.log('生成的队伍:', resultTeams);

函数返回的resultTeams是二维数组结构,每个子数组对应一支2人队伍,随机生成的结果示例:[['name5', 'name2'], ['name7', 'name1'], ['name3', 'name8'], ['name4', 'name6']]


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:36:21