You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组顺时针旋转求助:将末尾元素移至开头的循环代码优化

数组旋转问题解决方案

嗨,我来帮你搞定这个把数组最后一个元素移到开头的需求!

先明确你的需求:把类似 [a,b,c,d,e] 的数组,转换成 [e,a,b,c,d],也就是将最后一个元素移至开头,其余元素依次后移。

先说说你现有代码的问题

你当前的循环逻辑不仅绕,还存在数组索引越界的问题——数组的索引是从0开始的,Array[Array.Length] 其实是超出数组范围的位置(数组最大索引是 Array.Length - 1),而且从前往后遍历的方式会导致前面的元素被覆盖,没法完成正确的移位。

正确的循环写法

我们可以换个思路:先保存最后一个元素,然后从倒数第二个元素开始从后往前遍历,把每个元素往后挪一位,最后把保存的元素放到数组开头。代码如下:

// 示例数组
let arr = ['a', 'b', 'c', 'd', 'e'];

// 第一步:保存数组最后一个元素
const lastItem = arr[arr.length - 1];

// 第二步:从倒数第二个索引开始,往前遍历到0,逐个后移元素
for (let i = arr.length - 2; i >= 0; i--) {
  arr[i + 1] = arr[i];
}

// 第三步:把保存的最后一个元素放到数组开头
arr[0] = lastItem;

console.log(arr); // 输出:['e', 'a', 'b', 'c', 'd']

逻辑解释

  • 先抓出最后一个元素存起来,避免移位时被覆盖;
  • 从后往前遍历移位,这样每一步处理的元素都还没被修改过,不会出现值覆盖的问题;
  • 最后把保存的元素放到第一个位置,完成旋转。

如果你想更简洁实现,其实也可以用数组自带的方法:arr.unshift(arr.pop()),不过既然你需要循环写法,上面的代码就完全能满足需求啦。

内容的提问来源于stack exchange,提问作者Reef Proctor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:13:54