如何将奇数的人分成X个团队?

问题描述 投票:0回答:1

我正在开发一个函数,将一个数组的内容分成不同的 "团队"。

    generateTeams(players, numTeams)
    {
        var tempArray = [];
        tempArray = players.slice();

        var arrayLength = tempArray.length;
        var playerPerTeam = 
        Math.floor(tempArray.length/numTeams);
        console.log("chunk size is:", playerPerTeam)
        var results = [];

        while (tempArray.length){
           console.log("length",tempArray.length)
           results.push(tempArray.splice(0, playerPerTeam));
        } 
    }

如果我给它输入这样的数据

players = ["Juan", "Jeff", "Derek", "Bob", "Elizabeth", "Alex", "Isabelle"]
numTeams = 3

函数就会返回这样的结果

["Juan", "Jeff"] ["Derek", "Bob"]["Elizabeth", "Alex"] ["Isabelle"]

所以它返回的是4个队而不是3个队 我希望一个队有3个队员,而另外两个队有2个队员 而不是组成一个单独的队。

可能我遗漏了一个简单的解决方案,但我一直在研究如何将这个数组分割成一定数量的球队,我无法完全理解。

如果有任何帮助,我将不胜感激

javascript arrays splice
1个回答
0
投票

function generateTeams(players, numTeams)
    {
        var tempArray = [];
        tempArray = players.slice();

        var arrayLength = tempArray.length;
        var playerPerTeam = 
        Math.floor(tempArray.length/numTeams);
        console.log("chunk size is:", playerPerTeam)
        var results = [];
        while (results.length < numTeams ){
           results.push(tempArray.splice(0, playerPerTeam));
        }
        if(tempArray.length){
        results[results.length-1]=[...results[results.length-1],...tempArray]
        }
        return results;
    }

var players = ["Juan", "Jeff", "Derek", "Bob", "Elizabeth", "Alex", "Isabelle"];
var players2 = ["Juan", "Jeff", "Derek"];
var players3 =  ["Juan", "Jeff", "Derek", "Bob", "Elizabeth"]
console.log(generateTeams(players,3));
console.log(generateTeams(players2,3));
console.log(generateTeams(players3,3))

利用es6数组传播

如果你想 playerPerTeam 具备 3 用途 Math.ceil 而是


0
投票

使用 Math.ceil().

在这种情况下,arrayLength = 7,numTeams = 3.Means。7/3 = 2.3333

Math.floor(2.3333) 将导致2而。Math.ceil(2.3333) 将导致3。


0
投票

这是用数组reduce来解决这个问题的另一种方法。

function generateTeams(players, numTeams) {   
				var playerPerTeam = 
        Math.floor(players.length/numTeams);
        var team = 0;
        return players.reduce(function(results, player) {
            if(
               results[team] 
               && results[team].length === playerPerTeam 
               && team < numTeams - 1
            ) {
            	team++;
            }
            
        	  if (!results[team]) {
            	results[team] = [];
            }
            
          	results[team].push(player);
            
          
        	return results;
        }, []);
    }
    
var players = ["Juan", "Jeff", "Derek", "Bob", "Elizabeth", "Alex", "Isabelle"];
var players2 = ["Juan", "Jeff", "Derek"];
var players3 =  ["Juan", "Jeff", "Derek", "Bob", "Elizabeth"];
console.log(generateTeams(players,3));
console.log(generateTeams(players2,3));
console.log(generateTeams(players3,3));
© www.soinside.com 2019 - 2024. All rights reserved.