如何将每周角色工时对象转换为指定结构多维数组 缺失值补0
可行实现代码
function createDataFrame(data) { // 提取所有周次,固定列顺序 const weekList = Object.keys(data) // 初始化表头 const result = [['Role', ...weekList]] // 收集所有出现过的角色(自动去重) const roleSet = new Set() weekList.forEach(week => { Object.keys(data[week]).forEach(role => roleSet.add(role)) }) // 遍历每个角色生成行数据,缺失周次自动补0 Array.from(roleSet).forEach(role => { const row = [role] weekList.forEach(week => { row.push(data[week][role] ?? 0) }) result.push(row) }) return result }
逻辑说明
你之前的代码问题出在遍历周次时直接插入角色行,会导致同一个角色重复生成多行,且先插入的行没有后续周次的数值,自然无法对应列顺序。正确的处理流程如下:
- 先把所有周次全部提取出来作为固定列顺序,保证后续每个角色的数值位置和表头严格对应
- 遍历所有周次的角色数据,收集全部出现过的角色并去重,确定最终需要生成的行数
- 每个角色逐行生成时,按之前确定的周次顺序依次匹配工时,没有对应数据就填0,完全避免索引错位问题
如果需要兼容不支持空值合并运算符(??)的旧环境,把data[week][role] ?? 0替换为data[week][role] || 0即可,工时时长为正数,不会出现逻辑歧义。
内容的提问来源于stack exchange,提问作者user2868900
相关产品推荐
相关产品推荐

