JS for...of循环内如何比较索引?完成for循环转for...of
for...of 结合 entries() 实现相邻元素索引比较的正确方式
现有代码的两处核心问题
- 解构顺序完全写反:
items.entries()每次迭代返回的固定结构是[索引值, 当前元素值],你之前写的const [item, i] of items.entries(),会把索引值赋值给item、把元素值赋值给i,变量语义完全错位。 - 判断逻辑错位:原传统for循环的判断逻辑,从来不是比较两个索引值是否相等,而是比较当前索引位置的元素、和下一个相邻索引位置的元素是否相等。你注释里写的
if (i === i+1)本身就是恒不成立的无效判断。
与原循环运行结果完全对齐的写法
for (const [i, item] of items.entries()) { // 完全复刻原逻辑:对比当前位置元素与下一个相邻位置的元素 if (item === items[i + 1]) { // ... 原有业务逻辑 } }
保证结果一致的注意细节
不要为了避免数组越界,额外加i < items.length - 1的跳过判断。原传统for循环本身会遍历到数组最后一个有效下标:当i走到最后一个元素的位置时,items[i+1]取到的是undefined,这个行为要原样保留,否则最终的运行结果会和原循环出现偏差。循环中通过解构直接拿到当前索引,不需要额外在外部维护独立的索引变量。
内容的提问来源于stack exchange,提问作者randomCoder
相关产品推荐
相关产品推荐

