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
相关产品推荐
相关产品推荐

