如何将指定结构的JavaScript对象转换为表格行格式的数组
实现思路
- 首先提取输入对象的所有列名(即输入对象的自有属性集合)
- 统计总数据行数:遍历所有列对应的行索引,取最大索引值加1即为总行数,可适配任意行数的业务场景
- 逐行构建数据对象:遍历每一行索引,给每一行匹配所有列对应的单元格内容,组装成目标结构的对象
实现代码
function transformColumnToRow(columnData) { // 1. 获取所有列名 const columns = Object.keys(columnData); // 2. 计算总行数 let maxRowIndex = -1; columns.forEach(col => { const rowIndexes = Object.keys(columnData[col]).map(Number); const currentMax = Math.max(...rowIndexes); if (currentMax > maxRowIndex) maxRowIndex = currentMax; }); const totalRows = maxRowIndex + 1; // 3. 逐行组装数据 const result = []; for (let rowIdx = 0; rowIdx < totalRows; rowIdx++) { const rowItem = {}; columns.forEach(col => { // 取当前行对应列的值,无值时默认返回空字符串 rowItem[col] = columnData[col][rowIdx] ?? ''; }); result.push(rowItem); } return result; } // 测试示例 const input = {"SI":{"0":"1","1":""},"Description of Goods":{"0":"LTD","1":"TET"},"HSN/SAC":{"0":"38220090","1":""},"MRP/ Marginal":{"0":"849.00/NO","1":""},"Quantity":{"0":"30 NO 30 NO","1":""},"Rate":{"0":"470.00","1":""},"per":{"0":"NO","1":""},"Amount":{"0":"14,100.00","1":"846.00 "}}; console.log(transformColumnToRow(input));
补充说明
你给出的预期输出中第二行SI字段值为"1"属于笔误,按照输入数据第二行SI值应为空字符串。如果实际需求是SI字段为行号自动从1开始递增,可以在组装行对象时单独处理该字段:
// 替换原有SI赋值逻辑即可 rowItem['SI'] = String(rowIdx + 1);
内容的提问来源于stack exchange,提问作者Kshitij Soni
相关产品推荐
相关产品推荐

