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

使用Array.reduce统计选民分组时累加器二次循环变undefined报错

问题分析与解决方案

核心问题梳理

  1. reduce回调未返回累加器
    Array.reduce的回调函数必须返回更新后的accumulator对象,否则下一次迭代时acc会变成undefined,导致无法读取属性报错。你的代码里回调函数没有return语句,第一次循环后acc就丢失了。
  2. 总人数统计逻辑错误
    不管用户是否投票,都应该计入对应年龄段的总人数,但你的代码只在person.voted为true时才累加num${type}People,这会导致总人数统计不全。

修正后的完整代码

function voterResults(arr) {
  return arr.reduce(
    (acc, person) => {
      const type = person.age >= 18 && person.age <= 25
        ? `Young`
        : person.age <= 55
        ? `Mid`
        : `Old`;

      // 所有用户都计入对应年龄段总人数
      acc[`num${type}People`]++;
      // 仅投票用户计入对应年龄段投票人数
      if (person.voted) {
        acc[`num${type}VotesPeople`]++;
      }
      // 必须返回更新后的累加器,供下一次迭代使用
      return acc;
    },
    {
      numYoungVotesPeople: 0,
      numYoungPeople: 0,
      numMidVotesPeople: 0,
      numMidPeople: 0,
      numOldVotesPeople: 0,
      numOldPeople: 0,
    }
  );
}

// 测试调用示例
console.log(voterResults(voters));

关键修正点说明

  • 添加return acc:确保每次迭代后把更新后的累加器传递给下一次循环,彻底解决acc变为undefined的问题。
  • 调整总人数累加位置:将总人数统计移到投票判断外,保证所有用户都被计入对应年龄段的总人数。
  • 函数返回统计结果:原函数没有返回值,修正后返回reduce的最终统计对象,方便直接获取结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:23