JavaScript表格状态判断逻辑异常:无法按预期返回对应状态值求助
JavaScript表格状态判断逻辑异常:无法按预期返回对应状态值求助
看起来你的思路完全没问题,但代码里有几个细节问题导致了它总是返回1,我帮你梳理并修正一下:
问题分析
errorCount未初始化:你在使用这个变量前没有声明并赋值为0,这会导致执行errorCount++时抛出错误,或者判断errorCount >=1时得到非预期的结果,最终无法触发返回2的逻辑。- 状态判断顺序不合理:应该优先检查最高优先级的状态(error),再依次处理warning和success——虽然你遇到error时直接return,但把高优先级判断放在前面能让逻辑更清晰,避免低优先级状态先干扰变量值。
- 冗余的条件判断:比如
highestValue < 0这类判断没必要,因为我们只需要保留当前最高优先级的状态值(优先级:2(error)>1(warning)>0(success))。
修正后的代码
function checkTableData() { var allTables = $('#tableBody'); var highestValue = -1; // 初始化errorCount为0 var errorCount = 0; for (var i = 0; i < allTables.length; i++) { var table = allTables[i]; var trs = $(table).find('tr'); for (var j = 0; j < trs.length; j++) { var tr = trs[j]; var dataMode = $(tr).attr('data-mode'); var dataPure = $(tr).attr('data-pure'); // 优先检查最高优先级的error状态 if (dataMode === 'error') { console.log('检测到error,返回状态2'); // 只要有一个error就直接返回2,无需继续遍历 return 2; } // 其次检查warning状态 else if (dataMode === 'success' && dataPure === 'no') { // 只要有一个warning,就把状态设为1(因为优先级高于success) highestValue = 1; console.log('检测到warning,更新状态为1'); } // 最后检查success状态(只有当前还没更高优先级状态时才设置) else if (dataMode === 'success' && dataPure === 'yes' && highestValue < 0) { highestValue = 0; console.log('检测到success,更新状态为0'); } } } return highestValue; }
关键修改说明
- 初始化
errorCount为0,并且简化了error的处理逻辑:只要找到一个data-mode="error"的行,直接返回2,不需要计数(因为只要有一个error就符合条件)。 - 调整了判断顺序:先查error,再查warning,最后查success,确保高优先级状态不会被低优先级覆盖。
- 简化了warning的处理:只要存在符合条件的行,就把
highestValue设为1,不用再判断当前值大小(因为1的优先级高于0)。
你可以测试这几种场景验证结果:
- 所有行都是
data-mode="success"且data-pure="yes":返回0 - 存在至少一行
data-mode="success"且data-pure="no":返回1 - 存在至少一行
data-mode="error":返回2
备注:内容来源于stack exchange,提问作者Notion
相关产品推荐
相关产品推荐

