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

为何我的JavaScript for循环未遍历完数组,提前终止?

问题分析:数组相邻元素乘积遍历不全的原因

你的代码出现遍历终止过早的问题,核心原因有两个:

1. 循环条件随数组长度动态变化

循环中使用i < inputArray.length作为判断条件,但每次执行inputArray.shift()都会删除数组的第一个元素,导致数组长度不断缩短。以测试用例[3, 6, -2, -5, 7, 3]为例:

  • 初始数组长度为6,i=0,满足条件执行第一次循环,数组变为[6, -2, -5, 7, 3](长度5)
  • i=1,满足1 < 5,执行第二次循环,数组变为[-2, -5, 7, 3](长度4)
  • i=2,满足2 < 4,执行第三次循环,数组变为[-5, 7, 3](长度3)
  • i=3,此时3 < 3不成立,循环直接终止,所以只得到3个乘积结果

2. 固定取前两个元素计算乘积

你每次都计算inputArray[0] * inputArray[1],结合shift()操作,本质上是在依次计算原数组的(0,1)、(1,2)、(2,3)这三组乘积,但因为循环提前终止,漏掉了(3,4)、(4,5)这两组。


修正后的代码

不需要修改原数组,直接遍历到倒数第二个元素,计算每对相邻元素的乘积,最后取最大值即可:

function solution(inputArray) {
  const products = [];
  // 遍历到倒数第二个元素,避免i+1越界
  for (let i = 0; i < inputArray.length - 1; i++) {
    products.push(inputArray[i] * inputArray[i + 1]);
  }
  // 返回最大乘积
  return Math.max(...products);
}

console.log(solution([3, 6, -2, -5, 7, 3])); // 输出21

修正说明

  • 循环条件改为i < inputArray.length - 1,确保每个元素都能和下一个元素配对,不会因数组长度变化提前终止循环
  • 直接通过i和i+1索引获取相邻元素,无需修改原数组,逻辑更清晰
  • 最后用Math.max(...products)直接得到所有相邻乘积中的最大值,完全符合题目需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:10:24