JavaScript合并多数组为每行固定6元素二维数组的代码调整问题
二维数组合并固定6列对齐修复方案
问题根因
原代码两处逻辑错误导致行长度不一致:
- 空占位没有匹配各字段的固定长度规则:4个字段分别占1位、2位、1位、2位,合计6位,原
if_empty函数统一返回2个null的占位数组,和字段实际占位数不匹配 - 按行遍历取值时,若某字段数组长度小于总行数,取
a[i]会得到undefined,flatMap会直接忽略该空值,不会补对应数量的null,最终行长度不足6位
修复后完整代码
function group_arrays() { // 按顺序定义各字段:占位数、对应数据源 const fields = [ { colSpan: 1, source: [['abcd'], ['1234']] }, // menu 占第1位 { colSpan: 2, source: [] }, // home_team 占第2、3位 { colSpan: 1, source: [] }, // 空列 占第4位 { colSpan: 2, source: [['val1', '0001'], ['val2', '0002'], ['val3', '0003']] } // away_team 占第5、6位 ]; // 计算总行数 const totalRows = Math.max(...fields.map(f => f.source.length), 0); const result = []; for (let i = 0; i < totalRows; i++) { const row = []; for (const field of fields) { // 当前行该字段有值就用值,没有就生成对应长度的null占位 const cell = field.source[i] ?? Array(field.colSpan).fill(null); row.push(...cell); } result.push(row); } Logger.log(result); return result; }
验证结果
运行后输出完全符合要求,每行固定6个值,缺失位置自动补null:
[ ['abcd', null, null, null, 'val1', '0001'], ['1234', null, null, null, 'val2', '0002'], [null, null, null, null, 'val3', '0003'] ]
该逻辑兼容所有输入场景:无论四个字段传入空数组还是任意长度的二维数组,最终输出都会严格对齐,每行固定长度为6,缺省位置自动填充null。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

