如何用for循环实现数组中间向两端的索引遍历(不修改原数组)
实现从数组中间交替左右遍历索引的for循环方案
原需求是模拟从数组中间开始,每次通过splice取中间元素的索引遍历顺序(以长度为8的数组为例,索引顺序为:4 3 5 2 6 1 7 0),要求不修改原数组、不生成序列数组,仅用for循环实现。
索引规律分析
这个遍历顺序的核心逻辑是:
- 从数组的中间索引开始(长度为n时,中间索引为
Math.floor(n/2)) - 交替向左、向右移动索引,每次移动的步长依次递增1:先左移1位,再右移1位,接着左移2位,再右移2位……直到覆盖所有索引。
正确实现代码
基于上述规律,我们可以用for循环直接计算每次的索引:
const arrLength = 8; // 替换为你的数组实际长度 const middleIndex = Math.floor(arrLength / 2); for (let i = 0; i < arrLength; i++) { const currentIndex = i % 2 === 0 ? middleIndex + Math.floor(i / 2) : middleIndex - Math.floor((i + 1) / 2); // 此处可替换为实际业务操作,比如访问数组元素:yourArray[currentIndex] document.write(currentIndex + " "); }
运行这段代码,输出结果为4 3 5 2 6 1 7 0,完全符合预期。
代码逻辑说明
- 当
i为偶数时(第0、2、4、6次循环):向右移动,移动距离为i/2(整数除法),所以索引为中间索引 + 移动距离 - 当
i为奇数时(第1、3、5、7次循环):向左移动,移动距离为(i+1)/2(整数除法),所以索引为中间索引 - 移动距离
内容的提问来源于stack exchange,提问作者wcminipgasker2023
相关产品推荐
相关产品推荐

