JS中.some()返回结果异常,如何修正调度状态类判断逻辑?
问题修复:卡车调度状态判断函数逻辑错误
问题根源
- 逻辑运算符误用:第二个
if条件的判断逻辑存在错误,原代码中x.status === abp.enums.dispatchStatus.created || abp.enums.dispatchStatus.sent等价于(x.status === 0) || 1——因为abp.enums.dispatchStatus.sent的值是1,属于JavaScript中的真值,所以这个条件永远为true,不管卡车实际状态是什么,都会直接返回schedule-dispatch-status-lgreen,导致后面的判断分支完全无法执行。 - 枚举键名拼写不一致:枚举里定义的取消状态是美式拼写
canceled,但函数里判断的是英式拼写cancelled,这会导致取消状态无法被正确识别。
修复后的代码
function getScheduleTruckDispatchStatusClass(truck) { if (truck.dispatches === undefined || truck.dispatches === 0) { return 'schedule-dispatch-status-inactive'; } // 修正逻辑:每个状态都要和x.status做单独比较 if (truck.dispatches.some(x => x.status === abp.enums.dispatchStatus.created || x.status === abp.enums.dispatchStatus.sent)) { return 'schedule-dispatch-status-lgreen'; } if (truck.dispatches.some(x => x.status === abp.enums.dispatchStatus.acknowledged || x.status === abp.enums.dispatchStatus.loaded)) { return 'schedule-dispatch-status-dgreen'; } if (truck.dispatches.some(x => x.status === abp.enums.dispatchStatus.completed)) { return 'schedule-dispatch-status-active'; } // 修正拼写:与枚举键名保持一致 if (truck.dispatches.some(x => x.status === abp.enums.dispatchStatus.canceled)){ return 'schedule-dispatch-status-hidden'; } return ''; }
额外优化建议
可以把状态与类名的映射做成配置对象,让代码更易维护,后续新增状态时无需修改判断逻辑:
const statusClassMap = [ { statuses: [abp.enums.dispatchStatus.created, abp.enums.dispatchStatus.sent], class: 'schedule-dispatch-status-lgreen' }, { statuses: [abp.enums.dispatchStatus.acknowledged, abp.enums.dispatchStatus.loaded], class: 'schedule-dispatch-status-dgreen' }, { statuses: [abp.enums.dispatchStatus.completed], class: 'schedule-dispatch-status-active' }, { statuses: [abp.enums.dispatchStatus.canceled], class: 'schedule-dispatch-status-hidden' }, ]; function getScheduleTruckDispatchStatusClass(truck) { if (truck.dispatches === undefined || truck.dispatches === 0) { return 'schedule-dispatch-status-inactive'; } for (const mapItem of statusClassMap) { if (truck.dispatches.some(x => mapItem.statuses.includes(x.status))) { return mapItem.class; } } return ''; }
内容的提问来源于stack exchange,提问作者Eugene Sukh
相关产品推荐
相关产品推荐

