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

编写含递归与三元运算符的deepCount函数,统计嵌套数组元素总数并解释

实现deepCount递归函数:统计数组及嵌套数组总元素数

需求说明

编写deepCount函数,返回数组中所有元素(包括嵌套数组自身)的总数量,要求必须使用递归和三元运算符实现。

测试用例及预期输出

console.log(deepCount([])); // 0
console.log(deepCount([1, 2, 3])); // 3
console.log(deepCount(["x", "z", ["y"]])); // 4
console.log(deepCount([1, 2, [3, 4, [5]]])); //7
console.log(deepCount([[[[]]]])); //3

现有错误代码分析

先看这段有问题的实现:

let arr = [1, 2, [3, 4[5]]]; // 语法错误:4后面缺少逗号,应为[3,4,[5]]

function deepCount(arr) {
  let result = arr.length;
  for (const char of arr) {
    if (Array.isArray(arr[char])) { // 错误:char是元素不是索引,应直接判断char本身
      result += arr[char]; // 错误:直接累加数组对象,而非嵌套数组的元素数量
      deepCount(arr); // 错误:递归调用未接收返回值,无法获取嵌套数组的统计结果
    }
    return result; // 错误:循环第一次迭代就返回,后续元素完全未处理
  };    
}

这段代码的核心问题:

  • 数组定义存在语法错误
  • 遍历逻辑错误:for...of拿到的是元素,却用它当索引取arr[char]
  • 递归调用无效:既没接收递归返回的嵌套数组数量,也没正确累加
  • 提前返回:循环只执行一次就return,无法遍历所有元素

正确实现(递归+三元运算符)

function deepCount(arr) {
  // 当前数组直接元素数 + 所有嵌套数组的元素总数
  return arr.length + arr.reduce((total, elem) => 
    total + (Array.isArray(elem) ? deepCount(elem) : 0), 
    0
  );
}

实现逻辑详解

  1. 基础数量计算:arr.length是当前数组的直接元素数量(包括嵌套数组本身,比如["x", ["y"]]的length为2,这2个元素都要计入总数)
  2. 递归处理嵌套结构:
    • 用reduce遍历当前数组的每个元素,累加嵌套数组的贡献值
    • 对每个元素elem,通过三元运算符判断:如果是数组,就递归调用deepCount(elem)得到这个嵌套数组的总元素数;如果不是数组,贡献值为0
  3. 总和计算:当前数组的直接元素数 + 所有嵌套数组的总元素数,即为最终统计结果

关键测试用例验证

  • deepCount([[[[]]]]):最外层数组length=1,里面的[[]]是数组,递归调用得2(自身length=1 + 内层[]的length=1),1+2=3,符合预期
  • deepCount([1,2,[3,4,[5]]]):外层length=3,嵌套数组[3,4,[5]]的总数量是4(自身length=3 + 内层[5]的数量1),3+4=7,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:23