我正在开发一个函数,将一个数组的内容分成不同的 "团队"。
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个队员 而不是组成一个单独的队。
可能我遗漏了一个简单的解决方案,但我一直在研究如何将这个数组分割成一定数量的球队,我无法完全理解。
如果有任何帮助,我将不胜感激
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
而是
使用 Math.ceil()
.
在这种情况下,arrayLength = 7,numTeams = 3.Means。7/3 = 2.3333
Math.floor(2.3333)
将导致2而。Math.ceil(2.3333)
将导致3。
这是用数组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));