出错函数整段贴进去
裴知远做科室排班导入,把值班记录按科室分组,代码拿空对象当映射,遍历时直接往 map[item.deptId] 上 push。线上隔几天报一次,他一直怀疑夜班数据。第一个大框是"有问题的代码",贴完整的 buildSchedule 函数,别只贴报错那一行,否则工具看不到 map 是 {},断不出根因。第三个框的语言填 JavaScript。

堆栈连同猜测一起给
第二个大框"报错信息 / 异常现象"收堆栈也收现象,本案例贴了 TypeError: Cannot read properties of undefined (reading 'push') 和 schedule.js:4:19,另加一句自己的推测:某些科室只有夜班没有白班时会报。这句猜测被正面否掉了,回话说该现象不构成根因,最多说明这类科室的数据在导入批次里首次出现,把未初始化问题暴露出来。只贴堆栈就少了被纠正的机会。

四个候选根因排队看
点完"AI 生成",右侧分四段:问题定位、修复后代码、改动说明、如何避免。"问题定位"给四个按可能性排序的候选,头一个是未初始化数组,用最小输入 [{ deptId: 'A' }] 就能稳定复现;第二个讲 deptId 取 undefined 会变成字符串键,'__proto__' 与 'constructor' 会撞原型链;第三个讲上游部分预置不一致,这才解释了"为什么是偶发";第四个说非对象元素报错信息不同,可以排除。

只留核心改动也够
修复代码用 Object.create(null) 消掉原型链风险,入参不是数组就直接返回,循环里先跳过空值和异常 deptId,再用 String(deptId) 统一键类型,靠 hasOwnProperty 判首次出现、先建数组。"如何避免"里最实用的是把"单条记录"这条最小复现留成回归用例。"复制结果"取回全文,也可以存一份 TXT 文件,代码比原来长好几倍,上游已校验过数据时只留"首次出现先建数组"这一处也够。

企业知识网( www.qiyezhishi.com )提供的结果为参考性内容,不构成法律、税务或投资建议。具体请以主管部门口径与最新法规为准。