如何基于分组大小数组批量分组数组元素?兼容ECMA5实现
按指定分组规则批量分割数组(ECMA5兼容实现)
需要基于给定的group_size数组对元素数组进行分组:先按group_size的元素依次分割,剩余元素按group_size中的最大值分组。现有代码未得到预期结果:
现有代码
var group_size = [1, 3, 5]; var elements = ['a','b','c','d','e','f','g','h','i','j','k','l']; var output = []; for (var i=0; i < group_size.length; i++) { output.push(elements.slice(i, group_size[i])) } console.log(output);
当前输出
[["a"], ["b", "c"], ["c", "d", "e"]]
预期输出
[['a'], ['b','c','d'],['e','f','g','h','i'],['j','k','l']]
分组规则
- 优先按
group_size数组中的元素依次分组 - 完成
group_size的所有分组后,剩余元素按group_size的最大值进行分组(最后一组不足最大值则保留剩余元素) - 示例:
// 示例1 Input = ['a','b','c'] Output = [['a'], ['b','c']] // 示例2 Input = ['a','b','c','d','e'] Output = [['a'], ['b','c','d'], ['e']] // 示例3 Input = ['a','b','c','d','e','f','g','h','i','j','k','l'] Output = [['a'], ['b','c','d'],['e','f','g','h','i'],['j','k','l']] // 示例4 Input = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'] Output = [['a'], ['b','c','d'],['e','f','g','h','i'],['j','k','l','m','n'], ['o','p']]
ECMA5兼容解决方案
function groupElements(groupSize, elements) { var output = []; var currentIndex = 0; var maxGroupSize = 0; // 找出groupSize中的最大值 for (var i = 0; i < groupSize.length; i++) { if (groupSize[i] > maxGroupSize) { maxGroupSize = groupSize[i]; } } // 按groupSize依次分组 for (var j = 0; j < groupSize.length; j++) { if (currentIndex >= elements.length) break; var endIndex = currentIndex + groupSize[j]; output.push(elements.slice(currentIndex, endIndex)); currentIndex = endIndex; } // 处理剩余元素,按最大分组大小分割 while (currentIndex < elements.length) { var endIndex = currentIndex + maxGroupSize; output.push(elements.slice(currentIndex, endIndex)); currentIndex = endIndex; } return output; } // 测试示例 var group_size = [1, 3, 5]; var elements1 = ['a','b','c','d','e','f','g','h','i','j','k','l']; console.log(groupElements(group_size, elements1)); // 输出:[['a'], ['b','c','d'],['e','f','g','h','i'],['j','k','l']] var elements2 = ['a','b','c']; console.log(groupElements(group_size, elements2)); // 输出:[['a'], ['b','c']] var elements3 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p']; console.log(groupElements(group_size, elements3)); // 输出:[['a'], ['b','c','d'],['e','f','g','h','i'],['j','k','l','m','n'], ['o','p']]
代码说明
- 计算最大分组长度:遍历
groupSize数组记录最大值,用于后续剩余元素的分组 - 按指定规则分组:维护
currentIndex作为当前分割的起始位置,每次从该位置取对应长度的元素并更新起始位置 - 处理剩余元素:当
currentIndex未到达数组末尾时,循环按最大长度分割剩余元素,直到处理完成
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

