如何编写for循环实现数组遍历时相邻索引元素依次相乘
相邻元素相乘循环实现方案
你当前写的嵌套循环属于过度实现,这个逻辑不需要双层循环,单循环即可完成。
核心逻辑
循环遍历到数组倒数第二个元素终止即可,每次运算直接取当前索引i的元素和下一个索引i+1的元素做乘法——最后一个元素没有后续相邻元素,不需要参与配对,同时把终止条件设为length - 1也能避免i+1超出数组索引范围报错。
参考代码
普通数字数组版本(对应给出的示例)
const array = [0,1,2,3,4,5] for (let i = 0; i < array.length - 1; i++) { const res = array[i] * array[i+1] console.log(`${array[i]}×${array[i+1]} = ${res}`) }
运行输出完全匹配预期:
0×1 = 0 1×2 = 2 2×3 = 6 3×4 = 12 4×5 = 20
适配Positions对象数组的版本
for (let i = 0; i < Positions.length - 1; i++) { const product = Positions[i].number * Positions[i + 1].number console.log(product) }
原代码问题说明
- 嵌套循环会生成笛卡尔积配对:外层每遍历一个元素,内层就会遍历从索引1开始的所有后续元素,相当于每个元素和它后面所有元素都做一次乘法,总计算量为
n*(n-1)次,远多于需求要求的n-1次相邻计算 - 内层循环索引j没有和外层i绑定,会出现非相邻、甚至反向索引的配对(比如i=2、j=1时,会计算索引2和索引1的乘积),完全不符合相邻配对的要求
内容的提问来源于stack exchange,提问作者fsf sdfsdf
相关产品推荐
相关产品推荐

