
本文详细介绍了如何根据一个预定义的分组大小数组来批量分割另一个元素数组。核心方法是维护一个当前处理的偏移量和已知的最大分组长度。首先按指定大小进行分组,当预设分组用尽而元素数组仍有剩余时,则按照之前遇到的最大分组长度继续切分,直至所有元素被分组。
在J*aScript开发中,我们经常会遇到需要将一个大型数组按照特定规则分割成若干个子数组(或批次)的需求。其中一种复杂的场景是,分组的大小并非固定,而是由另一个数组动态指定,并且当所有指定分组用尽后,剩余的元素需要按照之前出现过的最大分组长度继续分组。本文将提供一个健壮的解决方案来处理这种动态数组分组问题。
假设我们有一个包含多个元素的数组 elements,以及一个定义了分组大小的数组 groupSizes。我们的目标是根据 groupSizes 依次从 elements 中取出相应数量的元素形成批次。当 groupSizes 中的所有大小都被使用完毕,但 elements 数组中仍有剩余元素时,这些剩余元素应按照 groupSizes 中出现过的最大值进行分组,直到 elements 被完全处理。
示例需求:
预期输出:[['a'], ['b','c','d'], ['e','f','g','h','i'], ['j','k','l']]
注意,groupSizes 用尽后,剩余的 ['j','k','l'] 按照 groupSizes 中最大值 5 进行分组,但由于只有3个元素,所以只取3个。
为了实现上述逻辑,我们需要跟踪几个关键状态:
Gridster.js多列网格式拖动布局插件
网页中拖动 DIV 是很常见的操作,今天就分享给大家一个 jQuery 多列网格拖动布局插件,和其它的插件不太一样的地方在于你处理拖放的元素支持不同大小,并且支持多列的网格布局,它们会自动的根据位置自己排序和调整。非常适合你开发具有创意的应用。这个插件可以帮助你将任何的 HTML 元素转换为网格组件
74
查看详情
/**
* 根据动态分组大小数组将元素数组进行分组。
*
* @param {Array} array 待分组的元素数组。
* @param {Array} groupSizes 定义分组大小的数组。
* @returns {Array<Array>} 包含所有分组的二维数组。
*/
function splitIntoGroups(array, groupSizes) {
var output = []; // 存储最终分组结果的数组
var maxLength = 1; // 记录 groupSizes 中出现过的最大分组长度,初始值设为1以处理最小分组
var offset = 0; // 记录当前处理到 array 的哪个位置
// 第一阶段:根据 groupSizes 数组进行分组
// 循环条件:i < groupSizes.length 确保不超出 groupSizes 边界
// offset < array.length 确保 array 还有元素可供分组
for (var i = 0; i < groupSizes.length && offset < array.length; i++) {
var currentGroupSize = groupSizes[i];
// 从当前 offset 位置开始,切片 currentGroupSize 长度的元素
output.push(array.slice(offset, offset + currentGroupSize));
// 更新 offset,为下一个分组做准备
offset += currentGroupSize;
// 更新 maxLength,记录出现过的最大分组长度
maxLength = Math.max(maxLength, currentGroupSize);
}
// 第二阶段:如果 array 仍有剩余元素,则按照 maxLength 进行分组
// 循环条件:offset < array.length 确保 array 还有元素可供分组
while (offset < array.length) {
// 从当前 offset 位置开始,切片 maxLength 长度的元素
output.push(array.slice(offset, offset + maxLength));
// 更新 offset
offset += maxLength;
}
return output;
}初始化:
第一阶段循环 (for 循环):
第二阶段循环 (while 循环):
让我们通过几个示例来演示 splitIntoGroups 函数的用法和行为。
// 示例数据
var elements = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'];
var groupsShort = [1, 3, 5];
var groupsLong = [1, 3, 5, 5, 5, 1000]; // 包含超大分组,但实际只取 array.length
console.log("--- 示例 1: 基础分组 (groupSizes 用尽,有剩余) ---");
// 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']]
console.log(splitIntoGroups(elements.slice(0, 12), groupsShort));
// 预期输出: [ [ 'a' ], [ 'b', 'c', 'd' ], [ 'e', 'f', 'g', 'h', 'i' ], [ 'j', 'k', 'l' ] ]
console.log("\n--- 示例 2: 元素数组小于 groupSizes 总和 ---");
// Input = ['a','b','c']
// Output = [['a'], ['b','c']]
console.log(splitIntoGroups(elements.slice(0, 3), groupsShort));
// 预期输出: [ [ 'a' ], [ 'b', 'c' ] ]
console.log("\n--- 示例 3: 元素数组刚好覆盖 groupSizes 部分 ---");
// Input = ['a','b','c','d','e']
// Output = [['a'], ['b','c','d'], ['e']]
console.log(splitIntoGroups(elements.slice(0, 5), groupsShort));
// 预期输出: [ [ 'a' ], [ 'b', 'c', 'd' ], [ 'e' ] ]
console.log("\n--- 示例 4: 元素数组远大于 groupSizes 总和 ---");
// 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']]
console.log(splitIntoGroups(elements, groupsShort));
// 预期输出: [ [ 'a' ], [ 'b', 'c', 'd' ], [ 'e', 'f', 'g', 'h', 'i' ], [ 'j', 'k', 'l', 'm', 'n' ], [ 'o', 'p' ] ]
console.log("\n--- 示例 5: groupSizes 中包含超大值,但不会超出 array 长度 ---");
// 此时 groupSizes 中的 1000 实际上会被 array 的剩余长度截断
console.log(splitIntoGroups(elements, groupsLong));
// 预期输出: [ [ 'a' ], [ 'b', 'c', 'd' ], [ 'e', 'f', 'g', 'h', 'i' ], [ 'j', 'k', 'l', 'm', 'n', 'o', 'p' ] ]通过以上步骤和代码示例,您可以有效地将数组元素按照动态指定的分组大小进行批量处理,并优雅地处理所有剩余元素,确保数据的完整性和逻辑的连贯性。
以上就是如何根据动态分组大小数组批量分组数组元素的详细内容,更多请关注其它相关文章!
# java
# 中国网站建设情况分析
# 天津环保网站建设大全
# 陕西省网站建设采购办法
# 扁平化
# 服务端
# 源代码
# 可供
# 组中
# 遍历
# 几个
# 有什么
# 仍有
# 拖动
# javascript开发
# javascript
# seo网上课程营销
# 泰安网站建设及优化公司
# 拱墅区网站建设加盟
# 宁波关键词排名招商
# 珠海seo流量
# 梦想素材网站建设管理
# 在网络上如何做营销推广
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
小红书网页版首页入口 小红书网页版电脑端官方登录链接
win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】
店铺如何关联视频号推广?视频号推广有什么用?
抖音网页版官方链接 抖音网页版官网链接入口
房产|直播|视频号怎么认证开通?|直播|需要什么资质?
《蓝色星原:旅谣》坐骑获取攻略
在Dash应用中自定义HTML标题和网站图标
电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法
c++如何链接Boost库_c++准标准库的集成与使用
美发店速赢秘籍
TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法
Python模块化编程:避免循环导入与共享函数的最佳实践
金牛福袋获取攻略
《我的恋爱逃生攻略》中文名字输入方法
深入理解Python对象引用与链表属性赋值
曝《丝之歌》DLC有望开发!开发商还有神秘新企划
MySQL多重JOIN技巧:高效关联同一表获取多角色信息
汽水音乐车机版 汽水音乐车机版官方入口
使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel
铁路12306官网登录入口 铁路12306在线购票官方平台
《友玩*》创建群聊方法
《小宇宙》标记不友善评论方法
《红果免费短剧》下载观看方法
如何高效地基于键列值映射DataFrame中的多个列
百度竞价WAP显示PC链接问题
性能与资源监视器快捷打开
J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制
J*aScript类型数组_TypedArray使用
qq邮箱格式填写示例 qq邮箱标准填写规范
掌握Go App Engine项目结构与GOPATH:包管理与导入实践
《知到》打卡课程方法
更换小红书群背景怎么换?小红书群规则怎么设置?
《新三国志曹操传》游历事件袁尚突围攻略
J*a列表元素格式化输出教程
Retrofit根路径POST请求:@POST("/") 的应用与解析
《万兴喵影》导出视频方法
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
全球各国上班时间表外贸邮件时间
构建可配置的J*aScript加权点击计数器与共享总计功能
iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程
在Django单元测试中优雅处理信号:基于环境的条件执行策略
风神瞳获取全攻略
OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南
哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南
飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读
WPS文字如何进行简繁转换
《糖豆》添加舞曲方法
C++ static关键字作用_C++静态成员变量与静态函数
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
海棠阅读登录教程_详细讲解海棠登录操作
2025-11-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。