JavaScript中能否使用闭包与递归处理嵌套数组实现元音计数?
问题根因
你的代码提前终止了遍历:在else分支处理嵌套数组时使用了return foo(arr[i]),return会直接中断当前for循环的执行,所以处理完第一个最深层的Tim后,整个递归链路直接返回结果,不会再遍历数组后续的其他元素。
修复方法
删除else分支里的return关键字,仅执行递归调用即可,递归处理完子数组后会自动回到上层循环继续遍历剩余元素。
修复后完整代码
let nestedArr = [ "Elie", ["Matt", ["Tim"]], ["Colt", ["Whiskey", ["Janey"], "Tom"]], "Lorien" ]; function countVowels() { let vowelsCount = 0; let vowels = ['a', 'e', 'i', 'o', 'u']; return function foo(arr) { for (let i = 0; i < arr.length; i++) { if (typeof arr[i] === 'string') { for (let letter of arr[i]) { if (vowels.includes(letter.toLowerCase())) { vowelsCount++; } } } else { // 移除return,仅执行递归调用 foo(arr[i]); } } return vowelsCount; } } const counter = countVowels(); console.log(counter(nestedArr)); // 输出15,符合预期
内容的提问来源于stack exchange,提问作者vdmclcv
相关产品推荐
相关产品推荐

