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

如何用JavaScript递归统计嵌套数组的总数?

递归统计嵌套数组总数的正确实现

先梳理你代码里的几个核心问题:

  • for(let element in array); 末尾的分号直接终止了循环,后面的if语句和循环完全无关,等于白写。而且用in遍历数组容易拿到非元素属性,建议用of遍历数组元素。
  • if(Array.isArray(array)) 判断的是整个传入的数组,而非当前遍历的元素,完全搞错了判断对象。
  • 递归调用传的是原数组array,不是当前的子元素,会导致无限递归。
  • 函数没有返回值,所以console.log会输出undefined,根本拿不到统计结果。

正确实现思路

每个数组本身算1个,然后遍历它的每一个元素:

  1. 初始化总数为1(当前数组本身)。
  2. 遍历数组的每个元素,如果元素是数组,就递归统计这个子数组的数量,加到总数里。
  3. 最后返回统计好的总数。

修正后的代码

function countArrays(array) {
    // 当前数组本身算1个
    let sumTotal = 1;
    
    // 遍历数组的每个元素
    for (const element of array) {
        // 判断当前元素是否是数组
        if (Array.isArray(element)) {
            // 递归统计子数组的数量并累加
            sumTotal += countArrays(element);
        }
    }
    
    // 返回总数
    return sumTotal;
}

// 测试用例
console.log(countArrays([1, 2, 3])) // 输出1,正确
console.log(countArrays([1, [1, 2, 3], 3])) // 输出2,正确
console.log(countArrays([[1,2],[3,[4]]])) // 输出4,正确(外层数组+两个子数组+最内层数组)

递归逻辑解释

以第二个测试用例[1, [1,2,3], 3]为例:

  • 第一次调用countArrays,sumTotal初始为1。
  • 遍历元素:1不是数组,跳过;第二个元素是数组,调用countArrays([1,2,3])——这个调用里sumTotal是1,遍历三个元素都不是数组,返回1,所以sumTotal变成1+1=2;第三个元素3不是数组,跳过。
  • 最终返回2,和预期一致。

内容的提问来源于stack exchange,提问作者Sharon Kaufman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:40:56