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

JS递归计算嵌套对象偶数和结果错误、遍历遗漏问题排查

问题根源

你的代码存在两个核心bug,直接导致结果错误、遍历不全:

  • 遍历到嵌套对象时使用return返回递归结果,会直接终止当前层级的for...in循环,处理完c属性的分支后就直接退出函数,自然不会遍历到后面的e属性。
  • 递归时把当前已经累加的sum作为参数传入下一层,同时又把下一层递归的返回值加到当前sum上,造成数值重复累加,最终结果比正确值多2。
修复后代码
function nestedEvenSum(obj) {
  let sum = 0;
  for (const k in obj) {
    if (typeof obj[k] === 'object' && obj[k] !== null) {
      // 仅累加子层递归结果,不做return终止循环
      sum += nestedEvenSum(obj[k]);
    }
    if (typeof obj[k] === 'number' && obj[k] % 2 === 0) {
      sum += obj[k];
    }
  }
  return sum;
}

const obj = {
  a: 2,
  c: {c: {c: 2}, cc: 'b', ccc: 5},
  e: {e: {e: 2}, ee: 'car'}
}

console.log(nestedEvenSum(obj)); // 输出6,符合预期
修复说明
  • 移除了嵌套对象判断分支里的return,保证当前层所有属性都能被遍历到,不会遗漏e分支
  • 去掉递归函数的sum入参,每一层递归独立统计当前层及下属嵌套层的偶数和,返回后直接累加到上层总和,彻底避免重复计算
  • 补充了null值判断,因为typeof null返回值也是object,避免遇到null值时抛出运行错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:51:19