为什么两个功能相似的JS双层循环返回的执行结果不一致?
两个循环输出结果不同的核心原因如下:
- 第一个循环的遍历边界设置错误,漏了数组最后一位元素
你使用的测试数组[1,4,2,3,0,5]长度为6,有效索引范围是0~5。但第一个循环的两层循环终止条件都写的是< arr.length - 1,也就是i最大只能取到4,j最大也只能取到4,索引为5的元素5全程没有参与求和判断。
本身符合和为7的元素对有两组:4+3(对应索引1、3)、2+5(对应索引2、5),第一个循环直接漏掉了第二组,最终只能得到[1,3],求和为4。 - 第二个循环遍历边界正确,能覆盖所有元素
第二个循环是倒序遍历,外层i从最后一位索引5开始,内层j到索引0为止,所有元素都参与了求和判断,能匹配到5+2、3+4两组符合条件的元素对,得到[5,2,3,1],求和为11,符合预期。
额外注意:你当前代码中使用
arr.indexOf(arr[i])获取索引的写法存在隐患,如果数组有重复元素,indexOf只会返回第一个匹配元素的索引,会导致结果错误,建议直接推入i和j本身即可。
内容的提问来源于stack exchange,提问作者Dhruv Sharma
相关产品推荐
相关产品推荐

