你如何将奇数的人分成 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数组传播
如果您希望 playerPerTeam
让 3
使用 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));
所以我正在研究一个将数组内容拆分为不同 "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数组传播
如果您希望 playerPerTeam
让 3
使用 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));