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
相关产品推荐
相关产品推荐

