我有23支球队,我想将他们分成1到4组。当我分成2组时,它正在工作,但是当我将它们分成3-4组时,总共不是23个团队,有没有办法将它们分享到输入文本?
我认为逻辑是这样的
团队总数:当我分成1组A组时,23支球队:23支球队
如果我分成2组A组:12组B组:11支球队
如果我分成3组A组:8组B组:8组C组:7组
所以团队的总数仍然是一样的
$('#total_group').on('change', function() {
var total_group = $('#total_group').val();
var participant = $('#team_ready').val();
if (total_group != "") {
// var first = Math.ceil(participant/total_group);
var divided = Math.ceil(participant / total_group);
var first = divided;
var second = first - participant;
var third = first - second;
var fourth = second - third;
var answer = [first, second, third, fourth];
$('#split_group').css("display", "flex");
var grouping = [];
var alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
for (var i = 0; i < total_group; i++) {
var content_data = "<div class='form-group' align='center' style='margin-bottom:5px;'><label>GROUP " + alpha[i] + "</label><input type='text' id='url_partner' name='url_partner' class='form-control' value='" + answer[i] + "' required></div>";
grouping.push(content_data);
}
var split_group = grouping.join('');
$('#split_group').html(split_group);
} else {
$('#split_group').css("display", "none");
}
});
请帮忙
由于23不能很好地分解为2,3或4,你可以创建一个像这样的通用函数来将任何一组队伍分成若干组
function groupTeams(teams, group_count) {
var groups = [];
var current_group = 0;
for ( var i = 0; i < teams.length; i++ ) {
// make sure that the group is an array
if ( !groups[ current_group ] ) {
groups[ current_group ] = []
}
// add the team
groups[current_group].push( teams[i] )
// and move to the next group
current_group += 1;
// go back to the beginning if we hit the end.
if ( current_group >= group_count ) {
current_group = 0
}
}
return groups;
}
然后,您可以在任何地方调用此功能,将任意数量的团队分组到任意数量的组中(如您所指出的那样,并非总是均匀)
例如:
var teams = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
// groups becomes array of 4 arrays containing the teams in each group
var groups = groupTeams( teams, 4 );
// and you can use the array functions to get metadata about these groups, such as their size...
var group_totals = groups.map( g => g.length )
// update UI based on groups
$('#total_group').on('change',function(){
var total_group = $('#total_group').val();
// var participant = $('#team_ready').val();
if(total_group!=""){
// var first = Math.ceil(participant/total_group);
var divided = Math.ceil(23/total_group);
var participant = 23;
if(total_group=="1"){
var first=divided;
var second=participant-first;
var third="";
var fourth="";
}else if(total_group=="2"){
var first=divided;
var second=participant-first;
var third="";
var fourth="";
}else if(total_group=="3"){
var first=divided;
var second=divided;
var third=participant-first-second;
var fourth="";
}else if(total_group=="4"){
var first=divided;
var second=divided;
var third=divided;
var fourth=participant-first-second-third;
}
var answer = [first,second,third,fourth];
$('#split_group').css("display","flex");
var grouping=[];
var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
for(var i=0;i < total_group;i++){
var content_data="<div class='form-group' align='center' style='margin-bottom:5px;'><label>GROUP "+alpha[i]+"</label><input type='text' id='url_partner' name='url_partner' class='form-control' value='"+answer[i]+"' required></div>";
grouping.push(content_data);
}
var split_group=grouping.join('');
$('#split_group').html(split_group);
}else{
$('#split_group').css("display","none");
}
});