使用递归检查嵌套数组是否存在数字7的代码调试问题
问题根因
- 你在
forEach回调中调用递归sevenBoom(val)时,没有接收和传递递归的返回值:就算嵌套数组里查到7,递归返回的"Boom!"只会被直接丢弃,外层函数收不到这个结果,自然不会返回。 forEach本身不支持中断遍历,就算你拿到了正确的返回值,也没法提前终止遍历把结果返回出去。- 函数没有设置兜底返回逻辑,遍历完所有元素都没找到7时,也会默认返回
undefined。
修复代码
把forEach替换为可中断的for...of循环,每次递归后判断返回值,拿到"Boom!"就直接向上传递,最后加兜底返回即可:
function sevenBoom(arr) { // 当前层级存在7直接返回 if (arr.includes(7)) return "Boom!"; for (const item of arr) { // 遇到嵌套数组就递归检查 if (Array.isArray(item)) { const checkRes = sevenBoom(item); // 递归查到7就直接向上返回,终止遍历 if (checkRes === "Boom!") return checkRes; } } // 所有层级都没查到7的兜底返回,可按需修改 return "未找到7"; }
内容的提问来源于stack exchange,提问作者Kayceecodes
相关产品推荐
相关产品推荐

