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

#each循环嵌套#reduce循环未完整遍历数组的问题排查

代码异常原因解析

核心问题本质

你遇到的循环提前终止的问题,核心是在each迭代过程中调用shift修改了原数组的长度,和Ruby中each迭代器的运行机制冲突:

  • Ruby的Array#each是按索引递增的规则遍历数组,迭代开始时会基于数组当前的长度确定遍历的索引范围
  • 你在每次迭代中调用ary.shift删除数组头部元素,会导致数组长度动态缩短,后续需要遍历的索引位置已经没有对应元素,迭代就会提前终止

不同长度数组的表现差异说明

  • 当数组长度为3时,你的需求本身只需要循环2次就可以完成所有两两乘积的求和,刚好和each能完成的迭代次数重合,因此看起来结果符合预期
  • 当数组长度为4时,你需要循环3次完成计算,但each迭代到第3次时,数组已经被缩短为长度2,找不到索引为2的元素,迭代直接终止,因此只执行了2次循环,得到错误结果23

最终until方案的合理性

你最后调整的until写法规避了each的索引遍历问题:until循环每次都会实时判断当前数组的长度,只要长度大于1就继续执行,不受初始数组长度的约束,刚好匹配你的计算逻辑,能得到正确结果35。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:00