JavaScript:for循环内嵌if语句(数组最大值查找)
搞懂用for+if找数组最大值的逻辑
嘿,我来帮你把这个困惑的if语句部分拆解得明明白白!首先先把你提到的代码补全(根据你的描述还原最常见的写法),这样我们能对着具体代码分析:
function findMax(integers) { let i = 0; // 你已经理解的第一步:初始化i为0 // 你懂的for循环:x从0遍历到4(对应数组长度5的情况) for (let x = 0; x < integers.length; x++) { // 你搞不懂的if语句就在这里 if (integers[x] > integers[i]) { i = x; } } const maxNumber = integers[i]; return maxNumber; } // 用你给的数组测试: findMax([5, 10, 21, 6, 100]); // 最终返回100
核心思路:用i“记住”当前最大值的位置
这个逻辑的本质是用变量i保存当前找到的最大值在数组里的下标(位置),然后逐个检查数组里的每个元素,一旦发现比当前最大值更大的数,就更新i的位置,让它指向这个更大的数。
我们结合你给的数组[5,10,21,6,100],一步步走一遍每一次循环,你就能秒懂:
逐次循环拆解
初始状态:i = 0,也就是我们一开始默认数组第1个元素(下标0)5是当前最大值。
- x=0(第一次循环)
- 检查条件:
integers[0] > integers[i]→5 > 5?不成立,所以什么都不做,i还是0。
- 检查条件:
- x=1(第二次循环)
- 检查条件:
integers[1] > integers[i]→10 > 5?成立! - 执行
i = x,把i改成1,现在i指向的是10,这就是当前的最大值了。
- 检查条件:
- x=2(第三次循环)
- 检查条件:
integers[2] > integers[i]→21 > 10?成立! - 执行
i = x,i改成2,现在i指向21。
- 检查条件:
- x=3(第四次循环)
- 检查条件:
integers[3] > integers[i]→6 > 21?不成立,i保持2不变。
- 检查条件:
- x=4(第五次循环)
- 检查条件:
integers[4] > integers[i]→100 > 21?成立! - 执行
i = x,i改成4,现在i指向100。
- 检查条件:
循环结束后,integers[i]就是数组里的最大值100啦!
补充:另一种更直观的写法(直接存最大值)
有些代码会直接用变量存最大值,而不是存下标,逻辑是完全一样的,你可以对照着理解:
function findMax(integers) { let max = integers[0]; // 初始最大值设为第一个元素 for (let x = 0; x < integers.length; x++) { if (integers[x] > max) { max = integers[x]; // 发现更大的数,直接更新max的值 } } return max; }
这个版本和你说的用i记录下标的版本,核心都是遍历每个元素,和当前最大值比较,更大就更新,只是一个存位置,一个存数值而已。
内容的提问来源于stack exchange,提问作者Vivian San
相关产品推荐
相关产品推荐

