JS统计数组被11整除元素数量遇≥111返回0的问题排查
问题分析与修复方案
现有代码的错误点
- 错误1:
Array.forEach的回调函数中执行return仅能终止当前轮次的回调执行,既不能中断整个遍历流程,也无法让外层div函数直接返回结果,因此你写的return 0逻辑完全不会生效,遍历会一直执行到所有元素处理完成。 - 错误2:判断逻辑顺序错误,当前代码先判断是否能被11整除,再判断是否≥111,若遇到类似121这类同时满足两个条件的数值,会优先触发计数逻辑,直接跳过≥111的判断,导致异常值检测失效。
- 错误3:两个判断为互斥分支,只要触发了
value % 11 === 0的条件,就会执行回调的return,≥111的判断逻辑永远不会对这类数值生效,进一步扩大了异常漏检的问题。
修复后的代码
推荐改用支持直接中断返回的普通for循环实现,逻辑最直观:
function div(list) { let counter = 0 for (const value of list) { // 优先判断是否满足异常终止条件 if (value >= 111) { return 0 } // 再判断是否符合计数条件 if (value % 11 === 0) { counter++ } } return counter } // 测试效果 console.log(div([11,12,22,33])) // 输出 3 console.log(div([11,12,22,33,136])) // 输出 0 console.log(div([11, 22, 33, 44 , 116])) // 输出 0
如果希望继续使用数组遍历API,可选择支持中断的Array.some实现:
function div(list) { let counter = 0 const hasInvalid = list.some(value => { if (value >= 111) return true if (value % 11 === 0) counter++ return false }) return hasInvalid ? 0 : counter }
内容的提问来源于stack exchange,提问作者Mohammed Alhawamdeh
相关产品推荐
相关产品推荐

