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

How do you split up an odd number of people into X teams?

所以我正在研究一个将数组内容拆分为不同 "teams":

的函数
    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

函数returns这个:

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

所以 returns 4 支球队而不是 3 支球队。我原以为一支球队有 3 名球员,另外两支球队有 2 名球员,而不是单独组成一支球队。

我可能缺少一个简单的解决方案,但我一直在研究如何将这个数组拆分成一定数量的团队,但我不太明白。

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

使用Math.ceil().

在本例中,arrayLength = 7,numTeams = 3。 意思是,7/3 = 2.3333

Math.floor(2.3333) 将产生 2 而 Math.ceil(2.3333) 将产生 3.

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数组传播

如果您希望 playerPerTeam3 使用 Math.ceil 而不是

这是使用数组 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));