You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:15:03