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

如何基于分组大小数组批量分组数组元素?兼容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']]

代码说明

  1. 计算最大分组长度:遍历groupSize数组记录最大值,用于后续剩余元素的分组
  2. 按指定规则分组:维护currentIndex作为当前分割的起始位置,每次从该位置取对应长度的元素并更新起始位置
  3. 处理剩余元素:当currentIndex未到达数组末尾时,循环按最大长度分割剩余元素,直到处理完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:23:15