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

使用递归计算嵌套对象数组中所有团队成员完成任务的总和

问题分析与修复方案

错误原因

代码结果多出4的核心问题是成员任务数累加时机错误:

  • 你把当前成员的completedTasks累加操作放在了遍历下属的循环内,这就导致该成员有多少个下属,自己的任务数就会被重复累加多少次。

我们可以直接复现代码计算过程验证:

  1. 根成员Rufus有2个下属,遍历2次下属的过程中,他的4个任务被加了2次,多算4个
  2. Clara有1个下属,遍历1次下属的过程中加了1次自己的6,结果正确
  3. Dana、Charles没有下属,直接加自己的任务数,结果正确
  4. 最终总和:(4*2) + 6 + 12 + 19 = 8+6+12+19=45,和运行结果一致

修正方案

调整累加逻辑:不管当前成员有没有下属,先累加自身的任务数,再递归遍历所有下属即可,不需要拆分有无下属的分支逻辑。
修正后的代码如下:

var totalTasks = function (team) {
  var sum = 0;
  var innerFunction = function(obj) {
    // 先累加当前成员的任务数
    sum += obj.completedTasks;
    // 递归遍历所有下属
    obj.manages.forEach(function(item) {
      innerFunction(item);
    });
  };
  innerFunction(team);
  return sum;
};
totalTasks(team); // 输出41,符合预期

也可以改成无外部变量的纯递归写法,更简洁:

var totalTasks = function (obj) {
  return obj.completedTasks + obj.manages.reduce((sum, item) => sum + totalTasks(item), 0);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:06:03