You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript均分列数算法问询:按每组最大数量分配列数

JavaScript 实现按最大组数均分列数的算法

当然可以实现这个需求!下面这个函数就能精准按照你要的规则,把指定列数 X 按每组最大数量进行均分分配,返回的结果完全匹配你给出的示例:

function splitColumns(totalColumns, maxPerGroup) {
  // 先算需要多少组:确保每组数量不超过最大值,所以用向上取整
  const groupCount = Math.ceil(totalColumns / maxPerGroup);
  // 计算每组的基础分配数量
  const baseCount = Math.floor(totalColumns / groupCount);
  // 算出有多少个组需要多分配1列(总列数除以组数的余数)
  const extraGroups = totalColumns % groupCount;
  
  // 构建结果数组
  const result = [];
  for (let i = 0; i < groupCount; i++) {
    // 前extraGroups个组在基础数量上加1,剩下的保持基础值
    result.push(i < extraGroups ? baseCount + 1 : baseCount);
  }
  
  return result;
}

逻辑拆解

咱们把这个函数的思路捋清楚:

  • 确定组数:用Math.ceil(totalColumns / maxPerGroup)计算需要的组数,比如11列每组最大5,11/5=2.2,向上取整后就是3组,这样不会有组超过5列的限制。
  • 基础分配值:把总列数平摊到所有组,得到每组的基础数量,比如11列分3组,基础值就是3。
  • 处理剩余列数:总列数除以组数会有余数,这个余数就是需要多分配1列的组的数量,比如11除以3余2,所以前2个组各多1列,变成4,最后一组保持3。
  • 生成结果:循环生成每组的列数,前extraGroups个组是baseCount+1,剩下的组用基础值,这样分配出来的结果最均匀,同时不会超过每组的最大限制。

验证示例

咱们来测试你给出的几个场景,结果完全符合预期:

  • 列数11,每组最大5:splitColumns(11, 5) → [4, 4, 3]
  • 列数12,每组最大5:splitColumns(12, 5) → [4, 4, 4]
  • 列数15,每组最大5:splitColumns(15, 5) → [5, 5, 5]
  • 列数13,每组最大5:splitColumns(13, 5) → [5, 4, 4]

内容的提问来源于stack exchange,提问作者Dennis Cafiero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:14:01