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

咨询:收银机项目中reduce方法嵌套switch语句失效原因

问题根源分析

你的switch语句看似“失效”,主要有两个关键原因:

1. reduce回调未返回累加器值

reduce方法的核心逻辑是每次迭代必须返回更新后的累加器,否则下一次迭代的累加器会变成undefined,最终整个reduce的结果也会是undefined。你的代码里只在switch的case里修改了sum,但没有把更新后的sum返回出去:

let register = cid.reduce( (sum, curr) => { 
  switch (curr[0]) { 
    case "PENNY" : sum += curr[1] * 0.01; break; 
    default: console.log("Unexpected currency unit"); 
  } 
  // 这里缺少return sum; 导致累加器值无法传递到下一次迭代
},0) 

没有返回的话,第一次迭代后累加器的更新值就丢失了,后续迭代的sum都会变成undefined,最终register也得不到你想要的累加结果。

2. 未覆盖所有货币单位的case

你只编写了"PENNY"对应的case,但cid数组里还有"NICKEL"、"DIME"、"QUARTER"等其他货币单位,这些没有对应的case处理,所以遍历到这些元素时,都会触发default分支的日志输出。这会干扰你的判断,让你误以为连第一个"PENNY"的case都没生效,但实际上第一个元素是成功匹配到case的——只是因为没有返回累加器,最终结果不符合预期,加上后续的default日志,才让你觉得switch完全失效了。

另外补充一个小细节:cid里的第二个元素已经是该货币单位的美元总价值了,比如["PENNY", 1.01]就代表收银机里有1.01美元的便士,不需要再乘以0.01,这会导致你计算的结果缩小100倍,也是和你预期输出不符的一个原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:00:42