如何在循环中向二维数组添加对象,满2个元素自动切换子数组?
二维数组按固定长度自动分组添加元素
需求:在循环过程中向二维数组添加对象,当当前子数组元素达到2个时,后续对象自动添加到新的子数组,最终形成[[Obj0,Obj1],[Obj2,Obj3],[Obj4,Obj5], ...]的结构,无需事后拆分数组。
修正后的实现代码
针对数组类型的Data(推荐用for...of遍历)
var arrayofArrays = [[]]; // 跟踪当前要添加的子数组索引 let currentIndex = 0; // 每组元素数量,可按需调整 const groupSize = 2; // 遍历Data数组中的每个元素 for (const data of Data) { const Obj = {"field1": data[0], "field2": data[1], "field3": data[2]}; // 检查当前子数组是否已满 if (arrayofArrays[currentIndex].length === groupSize) { // 新增一个空的子数组 arrayofArrays.push([]); // 切换到下一个子数组 currentIndex++; } // 将对象添加到当前活跃的子数组 arrayofArrays[currentIndex].push(Obj); }
针对类数组对象的Data(用普通for循环)
如果Data是类数组对象(比如DOM集合),可以用普通for循环确保遍历正确:
var arrayofArrays = [[]]; let currentIndex = 0; const groupSize = 2; for (let i = 0; i < Data.length; i++) { const data = Data[i]; const Obj = {"field1": data[0], "field2": data[1], "field3": data[2]}; if (arrayofArrays[currentIndex].length === groupSize) { arrayofArrays.push([]); currentIndex++; } arrayofArrays[currentIndex].push(Obj); }
关键说明
- 修复遍历逻辑问题:原代码使用
for(data in Data)会遍历对象的键(数组场景下是索引字符串),而非数组元素本身,导致data[0]取到的是索引字符串的第一个字符而非目标数据字段,因此推荐用for...of或普通for循环遍历数组/类数组。 - 动态切换子数组:通过
currentIndex跟踪当前活跃的子数组,每次检查该子数组长度是否达到设定的groupSize,满了就新增子数组并更新索引,实现添加过程中的自动分组。
内容的提问来源于stack exchange,提问作者faccio
相关产品推荐
相关产品推荐

